| Weitere Artikel aus dem Elo-Magazin |
Spiel: Ballons abschießen
von Eberhard Schwarz
Ganzen Artikel lesen...

Der Reiz des Ping-Pong-Spiels als Anwendung von Mikroprozessoren hat auch mich erfasst, als ich die Beiträge las. Selbst nicht im Besitz eines Originalspiels, aber mit „Restbeständen" in der Bastelkiste und dem Hinweis zum Selbstbau in [1] ging ich ans Werk. Da noch 6 Stück 5x8-LED-Matrix LTP2158A in der Bastelkiste seit geraumer Zeit auf sinnvolle Verwendung warteten, sollten diese eingesetzt werden. Um die Originallogik des Ping-Pong zu realisieren (Anode gegen Plus, Kathode gegen Masse), waren ein bisschen „Trickkiste" und Kompromisse angesagt. Näher will ich hier nicht darauf eingehen. Eigentlich wollte ich den ATMEGA8 kennenlernen, die LED-Matrix LTP2158A sinnvoll einsetzen und die Grenzen vom Multiplexen austesten. Deshalb stehen doppelt so viele LED-Spalten zur Verfügung. Durch die vielen Beiträge zum Ping-Pong und den Aufruf zu Programmen für den Bausatz habe ich mich bisher auf die Originalgröße (10x12) beschränkt.
Auch der von mir eingesetzte ATMEGA8 in DIL-Ausführung erfordert die Verwendung eines anderen AD-Ports, da ADC6 und ADC7 nicht zur Verfügung stehen. Im hier veröffentlichten Quelltext und Hexfile ist aber ADC7 (rechtes Potenziometer) genutzt. Es entstand die Idee für ein abgewandeltes Ping-Pong-Spiel mit nur einem Schläger und einfachem Bewegungsablauf. Der Spielball soll 3 Reihen Ballons (LEDs) abschießen. Dazu stehen 4 Bälle pro Level zur Verfügung. Wichtiger Hinweis: Es werden mindestens 2 Bälle benötigt, um alle Ballons zu treffen („gerade" und „ungerade"). Das ist etwas gewöhnungsbedüftig, vereinfacht das Programm aber erheblich. Es müssen alle Ballons abgeschossen werden, um zum nächsten Level zu gelangen. Die Geschwindigkeit des Balles steigt von Level zu Level. Am Ende des Spiels wird ein Punktestand errechnet und in Anlehnung an [2] angezeigt, bevor das Ping-Pong in den Ruhzustand versetzt wird. Ich denke, der Punktebereich bis 999 ist ausreichend. Vielleicht gibt es „Hardcore"-Spieler, die das schaffen. Auf jeden Fall können Sie den besten „Ballonschützen" der Familie ermitteln.
Download: Quelltext und Hexfile
Sub Spiel
Ebene = 0
Punkte = 0
Verz = 500 'Verzögerung in ms
Level: 'nächster Level
Incr Ebene
Schlaege = 0
If Verz < 101 Then Verz = Verz / 2 Else Verz = Verz - 100
'Ballons initialisieren
Leds(1) = 1023
Leds(2) = 1023
Leds(3) = 1023
For Baelle = 1 To 4 '4 Baelle pro Level
Zeichen = 3 'Startsequenz
Gosub Darstellung2
Wait 1
Zeichen = 2
Gosub Darstellung2
Wait 1
Zeichen = 1
Gosub Darstellung2
Wait 1
Zeichen = 20
Gosub Darstellung2
Ballricht = 4 'Ball initialisieren
X = 4
Y = Baelle - 1
Gosub Pixel_set
Do 'Hauptschleife
Waitms Verz
Dim Phelp As Word
'2er-Paddle ansteuern
Phelp = Getadc(7) / 120
Phelp = 2 ^ Phelp
Phelp = 3 * Phelp
Leds(12) = Phelp
'Ballons zählen
Ballon = Leds(1) + Leds(2)
Ballon = Ballon + Leds(3)
If Ballon = 0 Then
Gosub Pixel_reset
'Punkte für beendeten Level berechnen
Hpunkt1 = 50 * Ebene
Hpunkt2 = Schlaege * Ebene
Hpunkt1 = Hpunkt1 - Hpunkt2
Punkte = Punkte + Hpunkt1
Goto Level 'zum nächsten Level
End If
'Ball übers Spielfeld bewegen
Select Case Ballricht
Case 1:
If X < 12 Then Gosub Pixel_reset
Decr X
Decr Y
If X = 1 Then Ballricht = 2
If Y = 0 Then Ballricht = 3
If X = 1 And Y = 0 Then Ballricht = 4
Gosub Pixel_set
Case 2:
Gosub Pixel_reset
Incr X
Decr Y
If X = 12 Then 'Paddle testen
Vhelp = 2 ^ Y
Patest = Leds(x) And Vhelp
If Patest = 0 Then Goto Fehler
Incr Schlaege
Patest = Leds(x) / Patest
If Patest = 3 Then Ballricht = 1 Else Ballricht = 3
End If
If Y = 0 Then Ballricht = 4
If X = 12 And Y = 0 Then Ballricht = 3
Gosub Pixel_set
Case 3:
If X < 12 Then Gosub Pixel_reset
Decr X
Incr Y
If X = 1 Then Ballricht = 4
If Y = 9 Then Ballricht = 1
If X = 1 And Y = 9 Then Ballricht = 2
Gosub Pixel_set
Case 4:
Gosub Pixel_reset
Incr X
Incr Y
If X = 12 Then 'Paddle testen
Vhelp = 2 ^ Y
Patest = Leds(x) And Vhelp
If Patest = 0 Then Goto Fehler
Incr Schlaege
Patest = Leds(x) / Patest
If Patest = 3 Then Ballricht = 1 Else Ballricht = 3
End If
If Y = 9 Then Ballricht = 2
If X = 12 And Y = 9 Then Ballricht = 1
Gosub Pixel_set
End Select
Loop 'Ende der Hauptschleife
Fehler:
Next
End Sub 'Ende sub Spiel
Sub Score 'Punktestand anzeigen
'Restpunkte letzter Level berechnen
Ballon = 3069 - Ballon 'Differenz zu vollem Bild
Ballon = Ballon / 60 'kommt auf max. 51
Hpunkt1 = Ballon * Ebene
Hpunkt2 = Schlaege * Ebene
If Hpunkt1 > Hpunkt2 Then Hpunkt1 = Hpunkt1 - Hpunkt2 Else Hpunkt1 = 0
Punkte = Punkte + Hpunkt1
Zeichen = Punkte / 100
Gosub Darstellung1
Hzeichen = Zeichen * 100
Punkte = Punkte - Hzeichen
Zeichen = Punkte / 10
Gosub Darstellung2
Hzeichen = Zeichen * 10
Zeichen = Punkte - Hzeichen
Gosub Darstellung3
Wait 10
End Sub
[1]www.elo-web.de, Beitrag Ping-Pong selbst programmieren von B. Kainka
[2]www.elo-web.de, Beitrag Mustergenerator















