Das
Gedächtnistrainingsspiel "Memory", hier "Memo" genannt, gehört zu den
Spieleklassikern und wird fast jedem bekannt sein. Dieses Spiel wurde
hier elektronisch zur Verwendung auf der Ping-Pong-Platine umgesetzt.
Spielregeln:
Auszug aus Wikipedia unter http://de.wikipedia.org/wiki/Pairs
Eine
Anzahl von Karten, auf denen jeweils paarweise gleiche Bilder oder
Symbole abgebildet sind, wird gemischt und verdeckt ausgelegt, so dass
am Anfang nicht bekannt ist wo welche Karte liegt. Einer der Mitspieler
beginnt, zwei beliebige Karten umzudrehen, so dass diese für eine kurze
Zeit für alle Mitspieler sichtbar sind. Sind die Bilder nicht gleich,
muss er die beiden Karten wieder umdrehen und der nächste Mitspieler
ist dran. Wenn die Bilder der beiden Karten identisch sind, darf der
Mitspieler diese beiden Karten behalten. In diesem Fall darf er
außerdem erneut beginnen, zwei weitere Karten umzudrehen. Gespielt
wird, bis alle Karten erfolgreich aufgedeckt sind. Gewonnen hat der
Spieler, der die meisten Pärchen aufdecken konnte.
Umsetzung:
Hier
wird mit 2 Spielern und insgesamt 30 Karten, also 15 Pärchen gespielt,
angeordnet in 5 Reihen mit jeweils 6 Karten. Jede noch nicht
aufgedeckte Karte wird durch eine leuchtende LED symbolisiert. Eine
Karte kann durch die beiden Potis (rechts/links sowie hoch/runter)
angewählt werden, wobei die momentan angewählte Karte blinkt. Zur
Bestätigung der Auswahl wird der Taster benötigt, wodurch dann die
Karte aufgedeckt wird und das entsprechende Kartensymbol dargestellt
wird.
Es wird ein Taster (1-poliger Schließer) benötigt, der
zwischen PortD.3 (also Lötpad D3) und GND angeschlossen wird. Der
benötigte Pullup-Widerstand kann im Controller intern hinzugeschaltet
werden. Solch ein Taster kann leicht in das Ping-Pong-Gehäuse eingebaut
werden, indem vorsichtig ein Loch in den Deckel gebohrt wird, dann der
Taster hindurchgesteckt und per Mutter festgeschraubt wird. Mit 2
Stückchen Drahtlitze werden dann die beiden Anschlüsse mit D3 und GND
verlötet.
Bedienung des Spiels:
Gestartet wird das Spiel
durch Einwerfen einer Münze in den Münzschlitz. Es erscheint zunächst
für ca. 2 Sekunden ein Logo "Memo" als Begrüßungsbildschirm.
Anschließend erscheint ein blinkender Pfeil auf der rechten oder linken
Seite des Displays, der den gerade angwählten Spieler symbolisiert.
Durch Drehen des rechten Potis kann ausgewählt werden, welcher Spieler
beginnen soll. Durch Drehen nach rechts (im Uhrzeigersinn) wird Spieler
2 gewählt, durch Drehen nach links (gegen den Uhrzeigersinn) wird
Spieler 1 gewählt. Diese Auswahl muss durch einen Tastendruck bestätigt
werden.
Nun werden per Zufallsgenerator die Karten zufällig
angeordnet und es erscheint das Spielfeld mit 30 noch nicht
aufgedeckten Karten, symbolisiert durch 30 leuchtende LEDs. Eine
blinkende LED kennzeichnet die momentan durch die Potis angewählte
Karte. In der untersten LED-Zeile wird der Spieler angezeigt, der
gerade an der Reihe ist: ein horizontaler Balken links steht für
Spieler 1, ein horizontaler Balken rechts steht für Spieler 2.
Der
beginnende Spieler darf nun die erste Karte aufdecken. Hierzu wählt er
mit den Potis die gewünschte Karte aus und bestätigt durch einen
Tastendruck. Das Spielfeld wird nun ausgeblendet und stattdessen die
aufgedeckte Karte mittig auf dem Display angezeigt, sodass beide
Spieler diese sehen und sich merken können. Durch einen weiteren
Tastendruck wird wieder das Spielfeld eingeblendet. Der Spieler wählt
nun mit den Potis eine zweite Karte aus und bestätigt wieder durch
einen Tastendruck. Das Spielfeld wird wieder ausgeblendet und
stattdessen die beiden aufgedeckten Karten nebeneinander auf dem
Display angezeigt. Falls es sich um ein Pärchen handelt, blinkt die
Anzeige, der Spieler erhält einen Punkt und ist erneut an der Reihe.
Falls es sich nicht um ein Pärchen handelt, ist der andere Spieler an
der Reihe. Durch einen Tastendruck wird wieder das Spielfeld angezeigt.
Dies
wiederholt sich nun solange, bis alle Karten erfolgreich aufgedeckt
wurden. Abschließend wird das Ergebnis dargestellt, wobei die
Punkteanzahl des Gewinners blinkt. Durch einen Tastendruck wird das
Display abgeschaltet und der Standby-Modus aktiviert. Ein neues Spiel
kann durch Einwerfen einer Münze gestartet werden.
Hinweis:
Bei
der Auswahl einer Karte über die Potis werden auch freie Felder (also
Karte schon als Pärchen aufgedeckt und deshalb nicht mehr vorhanden)
durch eine blinkende LED angezeigt. Der Grund liegt darin, dass man
ansonsten bei bereits vielen aufgedeckten Pärchen "blind" mit den Potis
durchs Spielfeld fahren müsste, bis wieder eine noch nicht aufgedeckte
Karte selektiert wäre. Durch die blinkende LED hat man immer einen
Überblick, wo man gerade "navigiert". Falls man ein freies Feld
angewählt hat, wird jedoch der Tastendruck zum Aufdecken ignoriert, da
ja keine Karte auf dem gewählten Feld vorhanden ist. Nur bei
vorhandener, also noch nicht aufgedeckter Karte, funktioniert das
Aufdecken per Tastendruck.
Quellcode:
Der Code wurde mit
dem C-Compiler CodeVisionAVR (Version 2.04.6 Evaluation) erstellt.
Diese Evaluation-Version kann für den privaten nicht-kommerziellen
Gebrauch kostenlos verwendet werden und ist auf eine Codegröße von 3 kB
beschränkt, was für diese Anwendung ausreicht. Das komplette Projekt
ist in der ZIP-Datei enthalten. Die erforderliche Projektdatei, um die
Software in CodeVisonAVR zu öffnen ist memogame.prj, der eigentliche
Quellcode ist in main.c und memo.c enthalten.
Im Array leds[]
wird für jede LED der gerade aktive Zustand "ein" oder "aus"
gespeichert. Zusätzlich gibt es noch das Array ledsBlink, in dem für
jede LED gespeichert wird, ob diese blinken soll oder nicht. In der
Interruptroutine des Timers2, die ca. alle 1 ms aufgerufen wird, werden
diese Arrays ausgewertet und die LEDs entsprechend angesteuert. In
jedem Durchlauf wird die Variable cBlinkcnt erhöht und bei Erreichen
des Wertes 250 werden die blinkenden LEDs umgeschaltet, die
Blinkfrequenz beträgt also ca. 2 Hz.
Im Array arCards[] wird für
jede Karte der gerade aktive Zustand gespeichert: leeres Feld (d.h.
Karte wurde schon als Pärchen gefunden), noch nicht aufgedeckte Karte,
Karte angewählt bzw. nicht angewählt. Die Kartenmotive sind im Array
arImages[] gespeichert.
Quellen/Links:
Wikipedia:
http://de.wikipedia.org/wiki/PairsC-Compiler CodeVision AVR:
http://www.hpinfotech.ro/html/download.htm
Download: 1003memo.zip