PacManPython
Ein PacMan Spiel, dass in Python unter Verwendung von Pygame programmiert wurde.
Zum Ausführen des Spiels muss Python mit pygame (pip install pygame) auf dem Computer installiert sein. Um das Spiel zu starten kann die Datei "Start.py" im Order Start ausgeführt werden. Z.b. im Terminal: python3 Game.py
Allgemeines:
-
Der Spieler kann über die Pfeiltasten oder W, S, A, D gesteuert werden.
-
Die Geistern werden nacheinander aus ihrem Haus kommen und versuchen den Spieler auf unterschiedlichen Arten zu Jagen. Mal jagen sie ihn direkt, mal versuchen sie ihm den Weg abzuschneiden, oder ziehen sich für einen Kurzen Moment zurück.
-
Die Zeitanzeige zeigt an, wie lange der Spieler überlebt hat ohne von einem Geist getroffen zu werden.
-
Die Punkteanzeige, zeigt die Punkte welche gefressen wurden. Ein kleiner Fresspunkt gibt +10 Punkte, ein großer +50.
-
Wird ein großer Punkt gefressen "bekommen die Geister Angst" und ziehen sich größtenteils zurück.
-
Das Spiel läuft so lange, bis die HP (Leben) < 0 sind.
-
Ziel des Spiels ist es mit mindestens 0 leben alle Punkte im Spielfeld zu fressen.
-
Das gewonnene oder verlorene Spiel kann über das Drücken der "R" Taste neu gestartet werden.
Funktionsweiße der Geister:
-
Roter Geist (Blinky) verfolgt den Spieler immer auf dem schnellsten weg.
-
Rosa Geist (Pinky) versucht immer auf das Feld 4 Felder in Laufrichtung des Spielers zu gelangen. -> Gemeinsam schneiden sie dem Spieler immer wieder den Weg ab.
-
Blauer Geist (Inky) berechnet den Vektor von Blinky zum Spieler, verdoppelt dessen Länge und verkürzt dessen Länge so lange wieder in kleinen Schritten, bis der Vektor auf ein freies Feld zeigt. Dieses wird von ihm anvisiert. Dadurch erhält er ein schwer vorhersehbares Verhalten.
-
Oranger Geist (Clyde) verhält sich wie Blinky, aber zieht sich zurück wenn er in der unmittelbaren Nähe des Spielers ist. Dadurch ist er eher ungefährlich.
Technisch:
- Positionen, Richtungen und Geschwindigkeiten werden als Vektoren dargestellt.
- Geister verwenden für ihre Bewegung einen umgebauten AStar algorithmus. (https://de.wikipedia.org/wiki/A*-Algorithmus)
- Hierbei ergibt sich der Graph, auf welchem die Algorithmen arbeiten aus dem Labyrinth des Spiels.
- Zur Heuristischen Kostenberechnung des AStar werden Längen der Verbindungsvektoren zwischen einem Knoten des Graphen und dem Ziel verwendet.
- Jedes Element im Spiel (außer dem Labyrinth selbst) fügt sich in eine Vererbungsstruktur ein, um eine verallgemeinerung von Bewegungen oder Positionen zu gewährleisten.
- Intern (für das Pathfinding) wird ein 2D-Array mit 30x30 feldern verwendet.
- Um ein flüssiges Spielerlebnis zu ermöglichen, wird dieses 30x30 Array auf eine Bildschirmbreite von 780x780 hochskaliert. Positionen o.ä. werden demnach teilweiße auch im hochskalierten System berechnet und zwischen den beiden Systemen umgerechnet.
- Das Labyrinth wird aus einer selbst erstelltem Datei format ".pac" geladen. Hierbei kann in einem Rahmen von 30 Zeichen pro Zeilen und 30 Zeilen ein Labyrinth definiert werden. 0 ist hierbei ein freies Feld. 1 eine Wand. und 2 stellt das Geisterhaus dar. (Manche Position wie "Idle Loops" der Geister müssten bei einem anderen Labyrinth leicht angepasst werden)
- Die Kollissionserkennung zwischen dem Spieler und Wänden bzw. Geistern erfolgt über Linearkombinationen von Vektoren und Distanzbestimmung zwischen Ortsvektoren.
- Das Spiel unterstützt eine Skalierung auf die volle Bildschirmhöhe, hierbei muss aber ein Qualitätsverlust der Grafik in Kauf genommen werden.