In Pacman wählen die Geister Pfade unabhängig voneinander, um Pacman zu finden?

7

Ich habe also in letzter Zeit eine Menge Pacman auf meiner Zelle gespielt und frage mich, wie die Geister scheinbar unabhängig voneinander funktionieren. Ich dachte darüber nach, wie es programmiert worden wäre.

Eine Option, an die ich gedacht habe, waren Threads. Alle 4 Geister laufen in ihren eigenen Threads und finden irgendwie Pacmans Position. Aber es scheint ein bisschen zu viel, um vier Threads zu haben, die funktionieren und die Synchronisierung wäre schwierig. Außerdem hat Google pacman in Javascript geschrieben, das Threads nicht unterstützt, also kann es ohne Threads gemacht werden und es muss einen einfacheren Weg geben.

Mein zweiter Gedanke war Eventhandler. Ich verbinde nur das Ereignis 'directionChanged', das Pacman 4 Ereignishandlern zufeuern wird, eines für jeden Geist. Jeder Geist entscheidet dann, welchen Weg er nehmen soll, um nach Pacman zu gelangen. Dies denke ich ist wahrscheinlicher was passiert. Aber es kann langsam werden, wenn die Event-Handler synchron ausgeführt werden, da Pfade sequentiell berechnet werden müssen und der 4. Ghost Zeit benötigt, um die Richtung zu ändern, was möglicherweise eine sichtbare Verzögerung (wahrscheinlich) erzeugt. Außerdem würden die Geister selbst ein Ereignis abfeuern, wenn sie gegen eine Wand stoßen und ihre Ereignishandler würden die Geisterrichtung ändern. Aber angesichts der Häufigkeit, mit der Pacman die Richtung ändert und die vier Geister reagieren, erscheinen Event-Handler auch ein bisschen zu viel.

Ich sage, dass die obigen Ideen ein bisschen zu viel wären, weil das Spiel vor 30 Jahren geschrieben wurde, als CPU-Zeit und Speicher knapp waren, also denke ich, dass es einen viel einfacheren Weg geben muss.

Es scheint auch, dass die Geister verschiedene Wege gehen, auch wenn Pacman still ist. Verwenden alle Geister völlig unterschiedliche oder unterschiedlich optimierte Pfadfindungsalgorithmen?

Ich bin mehr daran interessiert herauszufinden, wie alle Geister gleichzeitig für sich selbst arbeiten, als die Algorithmen zur Pfadsuche, die sie verwenden. Gedanken?

    
desigeek 21.08.2010, 02:33
quelle

3 Antworten

6

Du überlegst das drastisch.

Threads und Event-Handler sind nach Videospiel-Standards furchtbar langsam. Multi-Threaded-Game-Engines sind eine relativ neue Erfindung, buchstäblich Jahrzehnte nach der Veröffentlichung von Pacman. Pacmans magere Logik wird in einer einzigen ziemlich engen Schleife auftreten, etwa in diesem sehr vereinfachten Pseudocode:

%Vor%

Dies ist ein ziemlich häufiges Muster beim Spielen und es gibt den Anschein von Konkurrenz. In der Regel läuft ein Spiel in einer einzelnen Schleife, die den Spielstatus um einen winzigen Schritt im Raum zwischen den Bildschirm-Neuzeichnungen "nach vorne" bringt. Aus diesem Grund ist die Leistung in der Spieleentwicklung immer noch sehr wichtig: Ihr Spiel muss über jedes Objekt im Spiel iterieren, das machen oder eine Entscheidung treffen muss (KI-gesteuerte Gegner, bewegliche Plattformen, einfache Animationen, usw.) und aktualisieren Sie ihren Zustand mindestens 30 Mal pro Sekunde.

    
meagar 21.08.2010, 02:41
quelle
13

Es gibt eine Menge toller Informationen darüber, wie Pacman hier arbeitet, einschließlich einiger ausführlicher Berichte über die Geisterverhalten.

** Hinweis Ich habe diese Informationen seit Pfadfindungsalgorithmus für Pacman vor einer Weile gefunden.

BEARBEITEN:

Dieser Blog post hat noch mehr Informationen über die Geister.

    
GWW 21.08.2010 02:40
quelle
1

Bevor ich jeden Frame gerendert habe, habe ich die Ghosts durchlaufen. Keine Ereignisse, Threads oder asynchronen Probleme auf diese Weise. Jeder Geist hat wahrscheinlich eine sehr grobe Heuristik, um seine Bewegungen zu bewerten und sich zu entscheiden (links oder rechts drehen, keine Aktion, was auch immer).

Hier ist eine Implementierung , die Sie ausprobieren können. :)

    
Robert Karl 21.08.2010 02:40
quelle

Tags und Links