Memory

memoryIm ersten Informatik-Semester hatten wir die Aufgabe bekommen eins von drei möglichen Spielen mit Java zu realisieren. Ich hatte mich für Memory entschieden, da mir dies am interessantesten erschien.

Ein Ziel dabei war die strikte Trennung von Logik und GUI. Daher existiert die Klasse MemoryGUI für die Oberfläche und die Klasse Memory zur Kapselung des eigentlichen Spiels.

Diese beiden Klassen implementieren jeweils eine Schnittstelle. Außerdem werden ständig Ereignisse von einer Klasse zur anderen geleitet. Beispielsweise, wenn man auf eine Karte klickt, dann sendet die MemoryGUI Klasse das Ereignis weiter, sodass Memory entsprechend reagieren kann. Andersrum ist es z.B. möglich, dass Memory ein Signal schickt, dass alle Karten neu gezeichnet werden sollen.

Ich habe das Spiel so aufgebaut, dass jeder Spieler in eine Klasse gepackt wird. Ist es ein menschlicher
Spieler, so wird die HumanPlayer Klasse verwendet und ist es ein Computerspieler, so wird PCPlayer
verwendet. Diese beiden Klassen erben außerdem von der abstrakten Basisklasse Player. Dort ist die Mehode
process() als abstrakt deniert, sodass HumanPlayer und PCPlayer, diese überschreiben müssen.

Diese Methode stellt den Kern der Spiellogik da. Ist ein Spieler an der Reihe wird genau diese Funktion
aufgerufen. Wird true zurückgegeben so bedeutet dies: Der nächste Spieler ist an der Reihe oder das Spiel ist vorbei.

Anfangs wollte ich das Spiel mehrspieler-fähig machen, dafür hat die Zeit leider nicht mehr gereicht. Theoretisch ist es jedoch möglich im Quellcode das Spiel sehr leicht auf drei oder mehrere Spieler zu erweitern, da die Architektur darauf ausgelegt ist. Man könnte sogar zwei Computer-Spieler erzeugen und sich ansehen wie diese gegeneinander spielen. Dazu müsste man den Code
in Memory.newRound() nur folgendermaßen abändern:

players.clear();
players.add(new PCPlayer(this));
players.add(new PCPlayer(this));

Genauso wäre es dann natürlich möglich Memory nur Mensch gegen Mensch zu spielen. Weiterhin wird
der zuletzt eingegebene Name des Spielers sowie eine kleine Statistik in einer Datei abgespeichert.

Download des Quellcodes (Netbeans-Projekt)