Memo-Spiel mit der Ping-Pong-Platine  

von Michael Gaus  

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller


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/Pairs
C-Compiler CodeVision AVR: http://www.hpinfotech.ro/html/download.htm


  
Download:  1003memo.zip


 


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller