PacMan
-
Hallo, kennt einer ein gutes Tutorial, in dem beschrieben wird, wie man Pacman am besten programmiert?
Mir persönlich geht es dabei gar nicht um die KI, sondern:
Wie gehe ich mit Pacman um. Wenn ich zB rechts klicke, soll Pacman dann ein ganzes Feld laufen und nur die Grafik wird interpoliert?
Oder kann Pacman sich auch halbe Felder bewegen? Und wenn ja wie bekomme ich dann hin, heraustzufinden wo Pacman sich gerade befindet?Ist etwas schwer zu erklären...
Stellt euch am besten einen SEHR langsamen Pacman vor. Was passiert, wenn sich dieser ein minimales Stück nach rechts bewegt? SOll ich sagen er ist auf dem Feld, in dem sich sein Mittelpunkt befindet?
Dann würde es sehr unschöne Möglichkeiten geben, halb durch die Wand zu laufen. Ich könnte natürlich eine genaue Kollisionsabfrage machen, dann müsste ich allerdings in jedem Schritt alle möglichen Kollisionen testen, was sehr aufwändig wäre, anstatt zu sagen Pacman befindet sich auf Feld (12,4), rechts ist eine Mauer-> wer kann nicht weiter.Ich hoffe meine Bedenken werden deutlich, ansonsten mach ich ein paar Bildchen
-
Die Frage ist, was spricht GEGEN die Sache mit den Feldern?
-
ravenheart schrieb:
Oder kann Pacman sich auch halbe Felder bewegen? Und wenn ja wie bekomme ich dann hin, heraustzufinden wo Pacman sich gerade befindet?
Da gibt es nichts herauszufinden. Das nennt man in der Programmierung wohl "Speicher" oder konkreter "Variable".
Wenn da eine Wand ist, passiert gar nichts. Ansonsten wird die Bewegung in Gang gesetzt. Mit einer bestimmten Geschwindigkeit bewegt sich die Figur in die anfängliche Richtung während die Steuerung blockiert ist. Sobald das nächste Feld vollständig erreicht ist, wird die aktuell gedrückte Taste wieder berücksichtigt.
-
TyRoXx schrieb:
ravenheart schrieb:
Oder kann Pacman sich auch halbe Felder bewegen? Und wenn ja wie bekomme ich dann hin, heraustzufinden wo Pacman sich gerade befindet?
Da gibt es nichts herauszufinden. Das nennt man in der Programmierung wohl "Speicher" oder konkreter "Variable".
Wenn da eine Wand ist, passiert gar nichts. Ansonsten wird die Bewegung in Gang gesetzt. Mit einer bestimmten Geschwindigkeit bewegt sich die Figur in die anfängliche Richtung während die Steuerung blockiert ist.Bäh! Ich will schon umdrehen (180°) können, noch bevor ich das nächste Feld ganz erreicht habe. Wäre sonst ziemlich fies.
-
hustbaer schrieb:
Bäh! Ich will schon umdrehen (180°) können, noch bevor ich das nächste Feld ganz erreicht habe. Wäre sonst ziemlich fies.
Ich kenne dieses Spiel nicht im Detail, aber dein Vorschlag wäre sicher sinnvoll.
-
Du könntest Vektoren benutzen auf denen Pacman und die Biester laufen können. Dann erübrigt sich die Kollisionsabfrage. Das beschränkt zwar die Möglichkeit Pacman im freien Raum herumlaufen zu lassen, aber das habe ich sowieso bisher in noch keiner Implementierung gesehen.
-
Pacman läuft doch sowieso immer und kann nicht stehenbleiben, oder hab ich das falsch in Erinnerung?
Pacman läuft. Wenn eine Taste zum abbiegen gedrückt wird (er also eine 90°-Drehung machen soll), wird diese Taste erst berücksichtigt, wenn er das nächste Feld erreicht hat. Sollte es da nicht gehen, wird die Taste verworfen.
Wenn Pacman eine 180°-Drehung machen soll, wird der Befehl sofort ausgeführt.Rennt er von selbst gegen ne Mauer musst du halt prüfen. Du wählst zufällig entweder links oder rechts aus und dort siehst du nach, ob der Weg frei ist. Wenn nein, nimm die andere Seite. Sackgassen gibts auf dem Spielfeld eh nicht, also reicht das
-
Wie ganu kann ich mir eine Vektorimplementierung vorstellen?
Das klingt sehr interessant, nur weiß ich nicht was man da genau macht
-
Hm, ich möchte wirklich nicht nerven, aber kann mir doch jemand erklären, wie genau das mit den Vektoren gemeint ist?
Ich kann mir darunter nichts allzu konkretes vorstellen.
(Was sicher nicht am Begriff Vektor liegt, sondern eher daran, wie ich sie hier verwenden sollte)
-
zwutz schrieb:
Rennt er von selbst gegen ne Mauer musst du halt prüfen. Du wählst zufällig entweder links oder rechts aus und dort siehst du nach, ob der Weg frei ist. Wenn nein, nimm die andere Seite. Sackgassen gibts auf dem Spielfeld eh nicht, also reicht das
Wenn Pacman in ne Ecke oder bei ner T-Kreuzung in die Wand läuft bleibt er stehen!
-
shisha schrieb:
Hm, ich möchte wirklich nicht nerven, aber kann mir doch jemand erklären, wie genau das mit den Vektoren gemeint ist?
Ich kann mir darunter nichts allzu konkretes vorstellen.
(Was sicher nicht am Begriff Vektor liegt, sondern eher daran, wie ich sie hier verwenden sollte)Du könntest die Karten erstellen, indem du Knotenpunkte bestimmst. Jeder dieser Knotenpunkte hat 4 Knoten (Links, Rechts, Oben, Unten - Um die Bedienung mit den Pfeiltasten einfach zu machen), die jeweils entweder auf einen anderen Knotenpunkt verweisen zusammen mit Entfernungsinformation oder aber ungültig sind.
Zu jedem Zeitpunkt befindet sich Pacman also auf einen dieser Knoten mit einer bestimmten zurückgelegten Wegstrecke, die vom zugehörigen Knotenpunkt aus einen Vektor auf den Zielknotenpunkt bildet.
Ist der Knoten ein "Rechts" Knoten, dann wechselt Pacman die Richtung, wenn die "Links" Pfeiltaste gedrückt ist. Hat Pacman die gesamte Wegstrecke des Knotens abgelaufen, dann bewegt sich Pacman am neuen Knotenpunkt entweder auf den Knoten der derzeit gedrückten Pfeiltaste, sofern ein gültiger Knoten dieser Richtung am Knotenpunkt verfügbar ist, oder läuft geradeaus weiter, wenn keine Pfeiltaste gedrückt ist. Ansonsten bleibt er stehen.
Bei einem Grafiktick berechnest du die Position an der sich ein bewegliches Objekt (Pacman, Biester) sich befindet und zeichnest ihn dort hin.
Durch die Darstellung in Knoten und Entfernungen wird auch die KI in Sachen Wegfindung einfacher zu gestalten sein. Zudem kannst du es grafisch ein wenig aufpeppen, indem die Vektoren nicht komplett Horizontal oder Vertikal verlaufen.