[Crossposting von Stackoverflow]
In einem Spiel wie Warcraft 3 oder Age of Empires scheinen die Möglichkeiten, mit denen sich ein KI-Gegner auf der Karte bewegen kann, nahezu unbegrenzt zu sein. Die Karten sind riesig und die Position anderer Spieler ändert sich ständig.
Wie funktioniert die KI-Wegfindung in solchen Spielen? Standardmethoden für die Graphensuche (wie DFS, BFS oder A *) scheinen in einem solchen Setup nicht möglich zu sein.
ai
path-finding
game-mechanics
search
Decken
quelle
quelle
Antworten:
In den meisten Fällen ist die Verwendung von A * über einem Navigationsnetz (allgemein als "Navmesh" bezeichnet) die Wegfindungslösung, die kommerzielle RTS verwenden. Es gibt eine detaillierte Erklärung, wie navmeshes arbeitet, warum sie eine bessere Lösung als Wegpunkt - Systeme sind, und Links zu Implementierungsressourcen, hier .
Wenn Sie spezielle Spielmodi (Punkt- / Knotenerfassung) oder Einheiten entwickeln möchten, die patrouillieren, Deckung suchen usw., möchten Sie wahrscheinlich eine Wegpunktebene auf Ihrem Navmesh implementieren, um das KI-Verhalten zu steuern ( keine Pfadfindung ).
quelle
Schauen Sie sich den Flowfield- Algorithmus an, der in Supreme Commander 2 verwendet wird. Er ist viel besser als die meisten RTS-Pathfinding-Systeme (fahren Sie mit ein paar Beispielen auf 0:50 fort).
quelle
Viele ältere Spiele verwenden A *. Das ursprüngliche Starcraft verwendete A *; was zu einigen Problemen im Umgang mit Kollisionen führte. Starcraft 2 beherrscht Kollisionen sehr gut und nutzt ein Schwärm- / Flockverhalten, um die Flüssigkeitskontrolle großer Gruppen aufrechtzuerhalten. Dieser Spielev-Artikel beschreibt, wie dies erreicht werden könnte.
quelle
Ich stimme den anderen Antworten bereits zu, versuche aber auch, WoW / Warcraft3 als tatsächliche 2D-Welten zu betrachten. Sie sind nicht so verschieden von Fliesen, es sind nur die Fliesen.
Sie könnten sich auch überlegen, wie ein GPS den besten Weg findet. es gibt jede Menge Hinweise für die Wegfindung durch verknüpfte Karten.
Ich denke, einige der ersten "Quake Bots" -Skripte könnten Ihnen auch helfen, da sie für die Arbeit in "unbekannten Gebieten" entwickelt wurden, weil wir unsere eigenen Levels von Grund auf neu entwerfen konnten.
Alles in allem würde meine persönliche Art, mit einer solchen Karte umzugehen, darin bestehen, sie als A * -Pfadfinder zu betrachten. Aber zuerst würde ich jeden "Kachelpunkt" vorberechnen und all diese mit "nächster Nachbar" usw. indizieren. Wenn ein Objekt von A nach B gehen muss, dann schaue einfach in B nach, was damit verbunden ist, und wiederhole dies bis zu dir erreiche das Ziel.
Abhängig von der Art des Spiels und der Landschaft / des Szenarios können auch andere Taktiken vor dem Scannen hilfreich sein. Einige Spiele haben sehr kleine Hindernisse und dies können "Straßenlinien" -Bewegungen sein, andere "Wie kann ich mich fortbewegen" für Objekte.
Hoffe, das ergibt ein wenig Sinn und hat dir vielleicht ein paar Gedanken zum Arbeiten gegeben.
quelle
Die meisten Spiele verwenden einen Suchalgorithmus oder A *, um Pfade auf einer Karte zu finden. Die KI ist in einigen Aspekten offensichtlich aus Leistungsgründen optimiert.
Sie werden dies in Starcraft 2 bemerken, wo Zerglings offensichtlich überhaupt nicht gut zurechtkommen. Es wäre ein CPU-Albtraum, dies für Zerglings zu tun. Sie tun einfach das Beste, um von A nach B zu gelangen, und versuchen nicht einmal, den besten Weg zu finden. Sie werden so nah wie möglich kommen und dann an den Drosseln oder Rampen den Flaschenhals schließen.
quelle
Karte ist ein Raster. Das Gitter ist eine Grafik. Ein * arbeitet mit einem Graphen, es ist ein Suchalgorithmus für Graphen. Ein * sollte einige Knoten des Graphen durchsuchen.
Wie bereits erwähnt, können sie Navigationsnetze verwenden. Aber das A * (oder etwas Ähnliches) befindet sich sowieso auf diesem Netz, weil Polygone dieses Netzes nur Knoten eines Graphen sind; Ein * sucht dann nach einem Pfad von einem Polygon zu einem anderen Polygon.
Wir sind uns nicht sicher, ob es sich um Warcraft- oder kommerzielle Spiele handelt, aber es gibt auch eine Technik namens Collaborative Diffusion , die sehr einfach ist. es wird normalerweise auf Gitter getan. Es gibt auch Techniken namens Potential Fields , die denen der vorherigen sehr ähnlich sind, wenn sie nicht gleich sind.
Sie könnten auch versuchen:
quelle
Ich bin völlig unerfahren, aber ich denke, dass eine gute Lösung auf Heuristiken basiert, nicht auf einer vollständigen Überprüfung der bekannten Karte. Ich kann mir vorstellen, dass Heuristiken lokal und erfahrungsbasiert sind. Lokale Kontrollen können auf lokalen Geländekontrollen und Hindernissen basieren und sich in die gewünschte Richtung bewegen. Ich denke, dass die meisten Karten keine komplexen labyrinthartigen Bewegungen erfordern, sondern ziemlich miteinander verbunden sind. Eine andere Heuristik besteht darin, zuvor bekannte Pfade (die von anderen Einheiten oder explizit vom Benutzer erkundet wurden) zu verwenden, um Einheiten an bekannte oder nahezu bekannte Positionen zu bewegen. Aber ich spreche über das Bewegen auf großen Karten, nicht wirklich in geschlossenen Räumen, wie ZorbaTHut sagte. In überfüllten Fällen kann der Algorithmus komplexer sein und eine Art "Vorhersage", Koordination zwischen Einheiten desselben Teams oder einfach semaphorische Wartestrategien erfordern. Ebenfalls,
Ich denke, heuristische Algorithmen sind gut, weil sie normalerweise eine gute Lösung für große Räume mit einer angemessenen Rechenzeit bieten (was wichtig ist, wenn Sie viele Einheiten bewegen).
Es tut mir leid, wenn dies eine generische Antwort ist: Ich habe mit Menschenmengen gearbeitet, aber der Raum war ziemlich eigenartig und ich kann nicht genau erklären, wie der Algorithmus funktioniert hat (er basierte auf Agenten, jedenfalls nicht global definiert). Ich hoffe, Sie können einige nützliche Ideen aus meiner Antwort erhalten.
quelle