Meine Lieblings-Computerspiele sind "Autorennen". Als ich vergangenes Jahr kurz vor Weihnachten die Pong-Platine entdeckt habe, wollte ich als erstes ein Autorennenspiel für die Platine entwickeln. Das habe ich dann, einfach auch zum Kennenlernen der Pong-Platine und der Programmiersprache BASCOM, angefangen umzusetzen und möchte nun meine Erfahrungen und das Ergebnis mit den ELO-Lesern teilen.
Die
Pong-Platine soll, zumindest in symbolischer Form, eine Fahrbahn mit
einem Auto darauf darstellen. Die Fahrbahn wird von oben nach unten
"gescrollt", wobei der Streckenverlauf zufällig sein soll. Die Aufgabe
des Spielers ist es nun, auf der Fahrbahn zu bleiben, die
Begrenzungslinien nicht zu überschreiten und dabei so schnell wie
möglich zu fahren. Sieger ist, wer die Gesamtstrecke am schnellsten
zurücklegt. Für die Steuerung des Autos werden die beiden Potentiometer
der Pong-Platine verwendet, wobei der linke die Geschwindigkeit
bestimmt, mit die Fahrbahn nach unten "scrollt", und der rechte das Auto
waagerecht hin und her verschiebt (links/rechts).
Als "Retro-Spiel" sollte es idealerweise auch einen der Geschwindigkeit entsprechenden "Retro-Motorengeräusch" erzeugen. Genaugenommen haben wir bis heute noch keine einzige Pong-Anwendung mit einem Ton gesehen bzw. gehört. Hier kann uns ein Piezo-Summer (Piezokeramischer Schallwandler - Conrad Artikel-Nr.: 751669-62) weiterhelfen. Für die Tonerzeugung wird eine Rechteckewelle genutzt, d.h. die entsprechenden „0" und „1"-Werte werden direkt an den Piezo-Summer geschickt. Die Frequenz der Rechteckwelle bestimmt die Tonfrequenz und damit die Tonhöhe. Der hohe Eigenwiderstand des Summers erlaubt es ihn direkt an den Ausgangs-Pin (Ausgang des µ-Controllers) anzuschließen.
Die Programmiersprache BASCOM selbst bietet einen Befehl ("SOUND") zur Tongenerierung an, der aber die Programmausführung derart beeinflußt, dass es zu stockenden Bewegungen der Fahrbahn kommt. Somit ist der Befehl hier ungeeignet. Die Tonerzeugung muss im Hintergrund unabhängig von der Hauptprogrammschleife erfolgen. Das Word „Hintergrund" führt uns quasi automatisch hin zu einer "Interrupt"-gesteuerten Lösung, bei der wir den "Timer 1" verwenden. In der Routine der Interrupt-Verarbeitung des Timers 1 wird der Status des Ausgangs-Pin "PD0" im Zyklus 1-0-1-0 usw. verändert.
Download: 1003Carrace.zip