Snake
von Mirko Horstmann
Neben
dem Urvater aller Videospiele gibt es noch einige Klassiker, die sich
auf der Spielekonsole umsetzen lassen. Das hier in einer einfachen
Variante vorgestellte Spiel "Snake" taucht seit Ende der 70er Jahre in
den verschiedensten Ausprägungen immer wieder auf, beispielsweise als
Dreingabe zu Betriebssystemen oder Handys. Ziel des Spiels ist es, eine
Schlange so über den Bildschirm zu steuern, dass sie nicht mit sich
selbst oder dem Spielfeldrand kollidiert und dabei die zufällig auf dem
Bildschirm platzierten Äpfel einsammelt. Jeder aufgesammelte Apfel
verlängert dabei die Schlange um ein Stück, so dass das Spiel mit der
Zeit immer schwieriger wird.
Bedienung
Die Steuerung
der Schlange wäre mit Tasten vermutlich einfacher als mit den an der
Pingpong-Konsole vorhandenen Reglern, so dass man sich durchaus
überlegen könnte, die Hardware um einige Tasten zu erweitern -
Lötpunkte mit Verbindungen zu I/O-Pins des ATMega8 sind auf der Platine
ja vorhanden. Das hier vorgestellte Spiel kommt aber mit der
Standardausstattung aus, wobei ein kurzer Dreh des rechten Reglers um
mehr als 45 Grad in die eine oder andere Richtung die Bewegungsrichtung
im bzw. gegen den Uhrzeigersinn ändert. Es ist darauf zu achten, dass
nach der Richtungsänderung der Regler sofort wieder in die
Mittelstellung gebracht wird, damit die Schlange sich nicht im Kreis
dreht und so mit sich selbst kollidiert. Damit der Spieler weiß, wo
sich die Mitte befindet, gibt es vor Anfang des Spiels eine kurze
"Kalibrierungsphase", in der man diese suchen muss. Dazu bewegt man den
Regler in Richtung der dargestellten Pfeile, bis diese durch eine Linie
ersetzt werden, die man möglichst in der Mitte des Bildschirms
platziert. Ist die Linie etwa anderthalb Sekunden ununterbrochen zu
sehen gewesen, dann geht das Spiel los: fortan erscheint immer ein
Apfel (blinkend) auf dem Bildschirm, den es einzusammeln gilt. Jeder
Apfel bringt einen Punkt, nach Ende des Spiels erfolgt eine
Punkteanzeige.
Programm
Die
Ansteuerung des Bildschirms erfolgt, wie schon aus dem
Laufschrift-Programm bekannt, in einer Timer-gesteuerten
Interruptroutine, die sich die Pixeldaten aus einem globalen Array
("leds") holt. Zusätzlich gibt es ein Array, in dem der jeweils
aktuelle Apfel eingetragen wird. Dieser wird bei jedem vierten
Bildschirmaufbau mit in die Anzeige kopiert, so dass die Äpfel blinkend
erscheinen. Die Position aller zur Schlange gehörenden Pixel sind
außerdem in einem Ringpuffer ("snake") gespeichert, damit sie korrekt
wieder vom Bildschirm gelöscht werden können.
Der
Analog-Digital-Konverter arbeitet bei diesem Programm im sogenannten
Free-Running-Mode, liefert also ständig einen 10-bit-Wert, der zu
Anfang der Hauptschleife aus den Datenregistern ADCL und ADCH
ausgelesen wird.
Das Programm unterstützt den aus dem
Originalspiel bekannten Start durch Münzeinwurf. Die Funktion
"sleepNow" ermöglicht dazu vor dem Standby nach Spielende am
entsprechenden Eingang (INT0) den externen Interrupt, der durch Kontakt
der beiden Drähte vor dem nächsten Spiel ausgelöst wird. Nach dem
Aufwachen wird der Interrupt deaktiviert und INT0 wieder auf Ausgang
geschaltet.
Entwickelt wurde das Programm mit gcc-avr. Download: C-Quellcode und Hexfile
Download: Snake.zip