Wegfindung in einem Java 2D-Spiel?

stimmen
6

Im Wesentlichen auf den ein Pacman-Klon Spiel ich arbeite. Ich habe einen Feind Klasse und 4 Instanzen dieser Klasse erstellt, die alle vier Geister des Spiels darstellen.

Alle Geister beginnen in zufälligen Bereichen des Bildschirms und dann müssen sie ihren Weg in Richtung des Pacman Charakter arbeiten. Da der Spieler den Pacman steuert, um es zu bewegen, sollten sie es folgen und die nächste Möglichkeit, auf ihn nehmen.

Es gibt kein Labyrinth / Hindernisse (noch) nicht, so dass die gesamte Karte (400x400 Pixel) ist offen Boden zu ihnen.

Für den Spieler und jeden Geist kann ich die X, Y, Bildbreite und -höhe Attribute abrufen. Auch i bereits eine Kollisionserkennungsalgorithmus, also keine Sorgen darüber, dass nur über die Geister finden ihren Weg zu Pacman.

Veröffentlicht am 08/03/2009 um 06:14
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
0

Man könnte beginnen bei A * (A - Stern) suchen

Und hier ist eine Seite , die Links zu anderen Weg zu finden , Algorithmen hat.

[Bearbeiten] gah ... Gehirn ist zu langsam ... über dieses Buch vergessen, es C oder C ++ ist (ich vergessen , welche), aber man kann immer noch die Konzepte für Java bekommen. Es kann nicht sein , das für Sie am einfachsten zu lesen, ist aber insgesamt nicht schlecht. AI für Spiele - Entwickler von David M. Bourg, Glenn Seemann .

Beantwortet am 08/03/2009 um 06:17
quelle vom benutzer

stimmen
12

Für einen guten Wegfindung Algorithmus unter Verwendung von A * wäre wahrscheinlich eine gute Idee sein, aber für ein einfaches Spiel , das nicht anspruchsvoll, effizient, noch effektiven Weg Suche erfordert, einfach die Zeichen, die auf ein Ziel bewegen , indem herauszufinden , die Richtung das Ziel sollte ausreichend sein.

Zum Beispiel, um die Entscheidung, den Charakter Zug zu machen, in Pseudo-Code:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

Ja, der Charakter wird nicht die effizienteste Bewegung machen, aber es wird bei jeder Iteration des Spiel Schleife mit dem Ziel näher und näher.

Es ist auch meine Vermutung, dass ein Arcade-Spiel aus den frühen 80er Jahren würde wahrscheinlich nicht anspruchsvoll Wegfindung Algorithmen werden.

Beantwortet am 08/03/2009 um 06:25
quelle vom benutzer

stimmen
6

Wenn Sie nur ein Raster von Pixeln haben - ein „großes Feld“, auf dem Pacman und Geist können sich frei bewegen - dann ist der kürzeste Weg leicht - eine gerade Linie zwischen dem Geist und dem Pacman.

Aber „kürzester Weg“ immer bedeutet, dass wir versuchen, ein Graph-Theorie Problem zu lösen. (Ich gehe davon Kenntnis von Graphen, eine Graphentheorie, adj. Matrizen, usw.!)

Im obigen Fall betrachtet jedes Pixel ein Knoten in einem Graphen zu sein. Jeder Knoten ist mit seinen Nachbarn durch eine Kante, und jede Kante hat gleiches „Gewicht“ (Bewegen mit dem Knoten auf „oben“ ist nicht langsamer als mit dem Knoten bewegend „unten“).

Sie haben also diese: ( "*" = Knoten "-, /, \, |" = Flanke)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

Wenn Pacman in der Mitte ist, kann es sehr leicht zu jedem anderen Knoten.

Etwas mehr näher an der Realität sein könnte dies:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Nun Pacman kann nicht diagonal bewegen. Um von der Mitte nach rechts unten erfordert 2 „Hopfen“ und nicht ein.

Um weiterhin den Fortschritt:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Nun, von einem Knoten in der Mitte zu einem Knoten an der Spitze zu gehen, müssen Sie 3 Hopfen. Allerdings bewegen in Richtung nur der Boden 1 Hop nimmt.

Es wäre leicht, jeden Spiel-Board-Setup in ein Diagramm zu übersetzen. Jede „Kreuzung“ ist ein Knoten. Der Pfad zwischen zwei Kreuzungspunkten ist eine Kante, und die Länge dieses Weges ist das Gewicht dieser Kante.

Geben Sie ein*. Durch den Aufbau eines Graphen (verwenden Sie eine adjency Matrix oder eine Liste von Knoten) können Sie den A * -Algorithmus verwenden, den kürzesten Weg zu finden. Andere Algorithmen sind Dijkstra. Und viele andere! Aber zuerst müssen Sie Ihr Problem in Bezug auf ein Diagramm zu gestalten, und dann Spielzeug mit, wie Sie vom Knoten A gehen würden (Pacman) B (Geist) zum Knoten.

Ich hoffe, das hilft!

Beantwortet am 08/03/2009 um 06:55
quelle vom benutzer

stimmen
0

Ich denke , geht für den kürzesten Weg Algorithmus bei jedem von Pacman gemacht bewegen. Eine sehr gute Umsetzung ist Dijkstra-Algorithmus .

Nur zusammenfassen: Visualisieren Sie das Labyrinth als Graph mit Ecken und Kanten. Jede Kante hat eine Wartezeit (in Ihrem Fall all Kanten haben gleiches Gewicht). Der Algorithmus findet den kürzesten Weg von der Quelle zum Ziel vertice vertice um einen Schritt nach unten jeweils sofort erreichbar Kante bewegt. Dann auf der nächsten vertice tun Sie das gleiche und behalten zu tun, bis Sie an das Ziel zu bekommen. Der erste Weg erreicht ist der kürzeste Weg. Es kann zu diesem Algorithmus getan viele Optimierungen sein, um die Dinge zu beschleunigen, wie zu berücksichtigen, wo der Pacman in seiner vorherigen Position war und in welcher Richtung es bewegte, so dass Sie einige heiristics im Algorithmus zu bekommen. Ich würde vorschlagen, den kürzesten Weg von jedem Geist zu Pacman auf jeder Bewegung zu finden und den Geist in dieser Richtung bewegen. Schließlich wird der Abstand verringern und Sie werden in der Lage sein, Pacman zu fangen.

Eine weitere Heuristik, die verwendet werden können, sie alle unmittelbaren Kanten von Pacman erreichbar zu finden und versuchen, so viele dieser Eckpunkte wie möglich von Geistern zu decken. Anstatt also Pacman als Ziel vertice der Einstellung wir die Eckpunkte immediatetly erreichbar von Pacman als Ziel gesetzt, das Ergebnis wird sein, dass die zur Verfügung stehenden Geister werden versuchen themajor Fluchtwege von Pacman zu verschleiern und ihn zu fangen.

Beantwortet am 08/03/2009 um 08:26
quelle vom benutzer

stimmen
3

Es ist schon eine sehr lange Zeit, aus dem Gedächtnis, aber die Geister in Pac-Man hat nicht viel zu tun in der Art und Weise der Wegfindung. Sie würden eine ziemlich Standard randomisierten Labyrinth Traversal tun, bis sie „entdeckt“ Sie, die sich entlang der Achse einen freien Weg zu Ihnen eines Korridors beteiligt zu finden, und dann würden sie direkt auf Sie, bis Sie aus ihrer Sichtlinie verschwunden, woraufhin sie würde ein zufälliges Muster fortzusetzen. Auf höheren Ebenen Pac-Man würde unsichtbare Wege für eine Weile hinter sich lassen, dass die Geister „riechen“ würden und manchmal folgen.

Wenn Pac-Man ein Einschalten bekam, ist der einzige Unterschied in der Algorithmus, dass, wenn sie dich entdeckt, würden die Geister Sie fliehen, anstatt zu Ihnen zu bewegen.

Also, für ein authentisches Erlebnis, werden Sie wahrscheinlich nicht brauchen ein sehr hoch entwickeltes Wegfindung Algorithmus überhaupt. Wenn Sie sein Phantasie wollen, natürlich können Sie eine * implementieren.

Beantwortet am 10/03/2009 um 09:11
quelle vom benutzer

stimmen
2

direkt auf Ihre Feinde zu Fuß ist ein Anfang, aber wenn man ein Labyrinth hinzufügen werden Sie ein bisschen smarter Wegfindung hinzufügen möchten, damit Ihre Geister in Kurven oder Sackgassen nicht stecken bleiben.

Das folgende Tutorial ist eine große leichte Führung zu gehen mit A * gestartet, mit herunterladbaren Beispielen.

Path Finding auf Tile basierte Karten

Beantwortet am 12/03/2009 um 13:42
quelle vom benutzer

stimmen
1

in Pacman hatten alle den Geist einen anderen chasing Algorithmus

  • Blinky -> Chases. Wird in der Regel den kürzesten Weg nehmen Sie, und neigt dazu, zu folgen.
  • Pinky -> Hinterhalte. Neigt einen Umweg zu Pac-Man zu nehmen. Tötlich. (Kleiner Finger und Blinky neigen andere Wahl zu machen, wenn eine Richtung der Wahl, oft der Spieler in einer Ecke caging)
  • Inky -> Freak. Dieser Typ wirkt seltsam. Er bewegt sich über das Brett ziemlich zufällig, aber manchmal jagt, wenn er in der Nähe bekommt.
  • Clyde -> Idiot. Bewegt zufällig. Nicht viel von einer Bedrohung.

Die Geister haben ein interessantes Muster in ihre Bewegungen programmiert: gelegentlich, werden sie gleichzeitig einzustellen und ihre Verfolgung von Pac-Man Abstand nehmen und wieder in ihre jeweiligen Ecken des Labyrinths, die Eingabe von „Scatter-Modus“.

gibt es eine vollständige Beschreibung der algo auf der Pacman Dossier

Grüße

Guillaume

Beantwortet am 10/04/2009 um 15:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more