Niedrige CPU / Speicher / Speicherbandbreite Pathfinding (möglicherweise wie in Warcraft 1)


7

Dijkstra und A * sind alle nett und beliebt, aber welche Art von Algorithmus wurde in Warcraft 1 zur Pfadfindung verwendet?

Ich erinnere mich, dass der Feind in schalenartigen Höhlen gefangen sein könnte, was bedeutet, dass es (höchstwahrscheinlich) keine vollständigen Berechnungen von "Anfang bis Ende" gab. Wenn ich mich richtig erinnere, könnte der Algorithmus ungefähr so ​​aussehen:

A) Bewegen Sie sich in Richtung Feind, bis Sie Erfolg haben oder eine Wand treffen

B) Wenn Sie von einer Mauer blockiert werden, folgen Sie der Mauer, bis Sie sich dem Feind nähern können, ohne blockiert zu werden, und führen Sie dann A) aus

Aber ich würde gerne wissen, ob jemand weiß :-)

[Bearbeiten] Wie Byte56 erklärt, suche ich nach einem Algo mit niedriger CPU- / Mem- / Mem-Bandbreite und wollte wissen, ob Warcraft einige besondere Geheimnisse zu liefern hat (ich habe diese Art der Wegfindung anderswo noch nie gesehen). Ich hoffe, dass dies der Fall ist mehr Übereinstimmung mit den Stapelaustauschregeln.


2
Ich glaube nicht, dass es A * verwendet hat. Eine 33-MHz-CPU, die alle Raster- und In-Game-Berechnungen durchführt? Es gab wahrscheinlich überhaupt keinen Raum für intelligente Wegfindung.
Bobobobo

2
Ich sehe nicht, dass dies mehr als nur Trivia ist. Können Sie erklären, wie nützlich es ist?
MichaelHouse


1
@ Byte56 Ich suche ein Pfadfindungsalgo, das weder viel CPU noch viel Speicher (insbesondere Speicherbandbreite) verwendet, und das scheint es zu sein.
Valmond

1
@ Valmond Dann solltest du nach einem fragen. Fragen Sie nicht, wie ein bestimmtes Spiel funktioniert A, sondern wie Sie es tun können A. Sie werden bestimmt bessere Antworten bekommen und es wäre kein Thema (wie diese Frage ist).
MichaelHouse

Antworten:


10

Eigentlich stellte sich heraus, dass dies eine interessantere Frage war, als ich dachte.

Video

Ich habe die "Rechtsregel" für die Pfadfindung vergessen, aber es scheint, dass das Spiel sie verwendet.

Angenommen, Sie sind in einem Keller verloren und es ist dunkel. Der einfachste Weg, einen Ausgang zu finden (falls es einen gibt!), Besteht darin, die Hand auf die nächste Wand zu legen und "der Wand zu folgen", alle Kurven zu verfolgen und durch die Spalten zu gehen, bis Sie einen Ausgang finden. Das einzige Mal, wenn dies nicht funktioniert, ist, wenn Sie zufällig eine Stange ("Insel") im Keller greifen, dann werden Sie für immer um diese Stange herumgehen.

Ich denke, das Spiel verwendet eine Variation dieser "Follow the Wall" -Regel, bis die Einheit eine Linie zum Zielpunkt findet.

Geben Sie hier die Bildbeschreibung ein


3
In dem von Ihnen verlinkten Video sah es so aus, als ob der Ork der Wand folgte, bis er wieder zur ursprünglichen blockierten Linie zurückkehrte.
Schlepper

1
Ja, es sieht so aus! Ich habe die Waffe auf Beelining gesprungen.
Bobobobo

Sehr schönes Video +1 danke dafür! Dein Bild (Bilder und Videos sollten bei der Abstimmung mindestens +2 bekommen!) Scheint zumindest für mich wie der Pseudo-Algorithmus zu sein, den ich im ursprünglichen Beitrag beschrieben habe, oder?
Valmond

4

Ich glaube nicht, "wie hat das X-Spiel Y erreicht?" ist technisch im Umfang dieses Stapels, aber ich werde eine Vermutung wagen, warum einige Pfadfindungsalgorithmen in einer Schüssel stecken bleiben: Sie laufen so etwas wie A *, aber nur bis zu einer bestimmten Tiefe. Dies begrenzt den Zeitaufwand für die Pfadfindung, garantiert jedoch keine umfassende Suche [was gut sein könnte, Starcraft hatte das Problem, dass Dragoner auf die andere Seite der Karte wandern und versuchen, einen Pfad zu finden].

Illustration von zwei Orks, die schalenförmige Wände navigieren

Im oberen Szenario ist der Suchradius des obersten Orks zu klein. Der "beste" sichtbare Punkt ist mit A markiert, der "beste" schiffbare Punkt befindet sich auf der näheren Seite der Wand gegenüber von A.

Im unteren Szenario ist Punkt A jetzt navigierbar, aber Punkt B sollte der "beste" navigierbare Punkt sein, und dies wäre der Weg, den ein eingeschränktes A * einschlagen würde.


1
Vielen Dank für die Antwort, aber ich bezweifle, dass A * verwendet wurde. Sie können Dijkstra dazu bringen, in kleinen 'Maps' viel schneller zu laufen, wenn Sie direkten Speicherzugriff haben (dh C / C ++ / asm).
Valmond

danke für die bearbeitung, aber ich denke, der algo funktioniert so, wie ich es erklärt habe, sonst würde sich der ork nicht an der wand entlang bewegen (und damit mein beispiel „scheitert“, muss die schüssel runder sein, wie ein kreis mit einer kleinen öffnung darin , dein Beispiel würde funktionieren, denke ich). Ich würde es aber gerne sicher wissen :-)
Valmond
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.