Spielprogrammierung mit Java
HomeAufgabenDruckenJava-Online

Pacman

Der PacMan kann mit Cursortasten in einem Spielgitter bewegt werden. Das Ziel ist es, alle weisse Pillen zu essen. Dabei wird er von zwei Geistern pinky und blinky verfolgt. Die beiden Geister können sich so wie PacMan nur auf den hellgrauen Gitterfeldern bewegen und verhalten sich nach verschiedenen Verfolgungsstrategien. Der rosarote Geist ist weniger aggressiv. Er bewegt sich willkürlich im Gitter und greift den Pacman nur an, wenn er ihm im Weg ist. Der blaue Geist kennt die Position des Packmanns und bewegt sich auf dem kürzesten Wege zu ihm. Wenn ein Geist den Pacman berührt, verliert er sein Leben und das Spiel ist fertig.

Dieses Spiel wurde bereits 1980 in Japan entwickelt und gehört weltweit zu den beliebtesten Computerspielen. Unser Beispiel stellt nur eine einfache Implementierung des Spieles dar. In einigen PacMan-Versionen gibt es vier Geister (Pinky, Blinky, Inky and Clyde), Pacman kann mehrere Leben haben und verschiedene "Welte" durchlaufen.


Programmcode für lokale Bearbeitung Downloaden: pacman.zip

 

Erklärungen zum Programmcode

Die Implementierung beinhaltet vier Klassen: die Applikationsklasse PacMan.java, die Actor-Klassen: PacActor.java und Ghost.java und die Klasse und PacManGrid.java, die für die Gestaltung des Hintergrunds zuständig ist.

Die Klasse PacManGrid: Das Labyrinth im Hintergrund ist ein Gitter mit 30 horizontalen und 33 vertikalen Zellen, die nach einem PacMan-Standardmuster als Wege, Randsteine oder Wege mit Pillen markiert sind. Die Programmierung des Hintergrunds ist eine Fleissarbeit, die durch die Symmetrie des Labyrinths ein wenig erleichtert ist.

Die Klasse PacActor implementiert einen GGKeyListener, der die TastaturEvents des Spielers registriert. Die Methode canMove() sorgt dafür, dass sich Pacman nur auf den hellen Feldern bewegt, die Methode eatPill() lässt die Pillen verschwinden und die Methode act() bewirkt, das Pacman mit verschiedenen Sprite-Bildern (Mund auf, Mund zu) erscheint.

Die beiden Geister sind Instanzen der Klasse Ghost. Sie unterscheiden sind nur in der Verfolgungsstrategie, die in der Methode moveStrategy() in Abhängikeit vom Ghost-Typ festgelegt ist.