Pacman Geist AI

8

Ich mache gerade ein Pacman-Spiel in Java. Ich habe allerdings eine Frage zu den Geistern.

Ich verstehe, dass die Geister nicht alle den gleichen Angriffsstil haben. Ich möchte zuerst an den Grundlagen arbeiten, um den Geist dazu zu bringen, nach dem Pacman zu gehen und sich nicht um Unterschiede zu kümmern.

Meine Frage an euch kluge Leute da draußen ist, was der beste Weg wäre, die Geister dazu zu bringen, den Pacman zu jagen, aber manchmal zufällig Wege umzuleiten. Ich benutze derzeit ein 21 x 21 2D-Array, um zu sagen, wo die Wände sind und so, so dachte ich, machen Sie es mehr versuchen und auf die aktuelle Gitterposition von Pacman. (zum Beispiel gehe zu 10,14) Natürlich, während man vermeidet, durch Wände wie Pacman zu gehen. Ich frage mich, wie ich es schaffen könnte und auch, dass die Geister manchmal anhalten und in eine andere Richtung gehen oder so, dass es nicht immer eine ständige Jagd ist und Pacman eine Chance hat, wegzukommen. Vielleicht haben einige von euch ein Pacman-Spiel programmiert oder kennen einfach einen guten Weg dafür. Jede Hilfe würde sehr geschätzt werden.

(Bitte beachten Sie, dass ich zur Zeit in einem Informatikkurs der Klasse 11 und in der Hälfte des ersten Semesters des erlernten Java bin.)

    
ComputerLocus 15.11.2011, 18:28
quelle

5 Antworten

6

Wenn Sie möchten, dass sich die Geister nicht alle gleich verhalten, treffen Sie jedes Mal, wenn sie auf eine Kreuzung stoßen, eine zufällige Mischung aus einer vernünftigen Verfolgungsjagd (z. B. Fortsetzen des Weges mit der kürzesten Distanz zu Pacman - Verwenden Sie Dijkstra-Algorithmus auf alle Nachfolger, um den besten zu wählen) und eine zufällige Wahl.

    
Pascal Cuoq 15.11.2011, 18:48
quelle
4

Ich fand diesen Artikel sehr hilfreich: Verständnis von Pac-Man Ghost Behavior , wie es erklärt genau was du brauchst.

    
Óscar López 15.11.2011 18:34
quelle
4

Hier ist eine Möglichkeit: Für alle Schritte, die der Geist nehmen kann, berechnen Sie, ob dieser Schritt Pacman näher bringt. Das kann mit der Manhattan-Entfernung geschehen, die in einem 2D-Raster nur die x distance + ist der y Abstand. Wählen Sie dann zufällig einen Schritt, wobei diesen Schritten eine höhere Wahrscheinlichkeit zugewiesen wird, die ihn näher bringt.

Wenn Sie ein Array steps mit den ersten n_closing_in Schritten haben, die die Schritte darstellen, die den Geist näher an Pacman bringen, können Sie diesen eine Gesamtwahrscheinlichkeit von prob_closing_in mit

zuweisen %Vor%

Dann verteilen Sie in etwa so, was in total_probability übrig ist, über die Schritte, die den Geist weiter von Pacman entfernen.

%Vor%

Wenn das Labyrinth nicht zu kompliziert ist und die Wahrscheinlichkeit, dass es sich schließt, >.5 ist, scheinen die Geister nach Pacman zu jagen, aber auf willkürliche Weise.

Wenn prob_closing_in in Richtung 1. erhöht wird, wird das Spiel schwieriger.

(Der gesamte obige Code ist nicht getestet und kann Fehler enthalten. Ich bin nicht besonders gut in Java.)

    
Fred Foo 15.11.2011 18:50
quelle
1

Für meinen AI-Kurs auf College-Ebene habe ich mit einer älteren Version des Pacman Ghost AI-Frameworks gearbeitet. Es sieht so aus, als ob die aktuelle Version hier Ссылка zu finden ist. In diesem Fall würden Sie Ihre eigenen Ghost-Agenten entwickeln, um einen Agenten oder benutzergesteuerten Pacman zu erfassen.

Dies war sehr nützlich beim Spielen mit verschiedenen KI-Techniken.

Mehr zu Ihrer Frage, die Ebenen in diesem Framework sind tatsächlich aus einem Graphen und nicht aus einem 2D-Array aufgebaut. Sie können sich den Code ansehen, um zu sehen, wie er es macht.

Der ursprüngliche Link ist tot und konnte bisher keinen offiziellen Spiegel finden. Das Folgende wird jedoch wahrscheinlich hilfreich sein:

Pac Man Ghost Verhalten verstehen Frau Pac Man gegen Ghost AI (GitHub) PacMan_v6.2 (GitHub)

    
Casey 15.11.2011 18:51
quelle
0

Die einfachste Implementierung einer solchen AI wäre die Verwendung eines naiven Graphensuchalgorithmus. BFS wäre eine einfache, die funktionieren würde. Man sollte jedoch eine Heuristik implementieren, um die Laufzeit natürlich zu optimieren, so dass eine einfache Manhattan-Distanz von Ghost-Agent zu Pac-Man ausreichen würde.

Zusammenfassung: BFS mit Manhattan-Distanzheuristik.

Wenn du schicker werden und deine Geister noch effizienter jagen willst, kannst du eine Spielstatus-Heuristik implementieren (basierend auf der Entfernung vom Geist zum Pac-man, und wie viele Punkte Pac-man bisher gegessen hat, zum Beispiel) um zu verwenden, wenn der Geist wählen muss, welche nächste Bewegung zu nehmen ist. Sie können die Beschneidungstechniken verwenden, um die Laufzeit in diesem Fall zu verkürzen.

    
ylun.ca 26.04.2016 21:52
quelle