G2047 mit Joysticksteuerung

Bild Alles zum Thema Programmierung
Bild All around programming

Moderatoren: Sven, Sleepy, Wolfgang, cas, des-or-mad

G2047 mit Joysticksteuerung

Beitragvon Sleepy » Sa 3. Mai 2014, 19:22

Eines meiner Favoriten aus dem 10Liner-Turbo-BASIC-Contest anlässlich der diesjährigen NOMAM ist das Spiel G2047 - es ist einfach und hat einen hohen Suchtfaktor. Lediglich die fehlende Joysticksteuerung (es wird über Tastatur gespielt) stört mich ein wenig.

Daher habe ich es für Joysticksteuerung angepasst. Leider läßt sich das Listing nicht so ohne weiteres mit dem Turbo-BASIC-Editor bearbeiten da die Zeilen Überüberlänge haben. Also müssen wir ein wenig tricksen.

Spiel (G2047.TXL) laden -> mit RENUM 0,100,10 etwas Platz schaffen. Die Zeilen habe deutliche Überlänge, so dass man sie splitten muß um die Änderungen vornehmen zu können.
Den Bildschirmrand mit POKE 82,0 ganz nach links setzen.

Dann mit LIST 170 die zu ändernde Zeile auf den Bildschirm bringen:

170 DO :K=PEEK($02FC)&$3F:IF K=$0E:G=%2:
H=-%1:K=H:L=F:M=%1:GO# UP:ENDIF :IF K=$0
F:G=%3:L=%1:M=-%1:H=%1:K=%1:GO# UP:ENDIF
:IF K=$06:G=%2:H=F:K=%1:L=-%1:M=-%1:GO#
LEFT:ENDIF :IF K=$07:G=%3:H=%1:K=-%1:L=
%1:M=%1:GO# LEFT:ENDIF :LOOP

Mit dem Cursor auf das erste Zeichen in der vierten Bildschirmzeile gehen und <SHIFT><INSERT> drücken.

Mit dem Cursor auf die Zeilennummer 170 gehen und <RETURN> drücken um die neue Zeile 170 in den Speicher zu übernehmen.

Mit dem Cursor auf das Leerzeichen am Anfang der heruntergeschobenen neuen Programmzeile gehen und mit 1 x <CONTROL><INSERT> Platz für die neue Zeilennummer schaffen.

Die neue Zeilennummer 172 eingeben und die Zeile mit <RETURN> in den Speicher übernehmen.

Jetzt haben wir die Möglichkeit die ursprünglich überlange Programmzeile mit Bordmitteln zu ändern:

170 DO :K=PEEK($02FC)&$3F:IF K=$0E:G=%2:
H=-%1:K=H:L=F:M=%1:GO# UP:ENDIF :IF K=$0
F:G=%3:L=%1:M=-%1:H=%1:K=%1:GO# UP:ENDIF

...wird durch STICK(0) ersetzt.

170 DO :K=STICK(0):IF K=$0E:G=%2:H=-%1:K
=H:L=F:M=%1:GO# UP:ENDIF :IF K=$0F:G=%3:
L=%1:M=-%1:H=%1:K=%1:GO# UP:ENDIF

durch 14 bzw. 13 ersetzen.

172 ENDIF :IF K=$06:G=%2:H=F:K=%1:L=-%1:M=-%1:G
O# LEFT:ENDIF :IF K=$07:G=%3:H=%1:K=-%1:
L=%1:M=%1:GO# LEFT:ENDIF :LOOP

...wird durch 11 bzw. 7 ersetzt.

Nun läßt sich das Spiel mit dem Stick steuern.



Um nach dem "Game over" das nächste Spiel bequem mit dem Feuerknopf starten zu können müssen wir Zeile 150 nach dem selben Schema präparieren:

150 # R:POKE $02FC,$FF:E=%1:FOR X=%1 TO
F:FOR Y=%1 TO F:IF NOT A(X,Y):E=%0:EXIT
:ENDIF :NEXT Y:NEXT X:IF E:POSITION 5,5:
A=PEEK(V):? "GaMe OvEr";:POKE V,A:GET X
:GO# S:ENDIF :X=RAND(F)+%1:Y=RAND(F)+%1
:IF A(X,Y)=%0:A(X,Y)=1:ELSE :GO# R:ENDIF

Die Trennung wieder mit <SHIFT><INSERT> in der vierten Zeile vornehmen, den Doppelpunkt am Ende der neuen Programmzeile 150 mit <SHIFT><DELETE BACKSPACE> löschen.

A=PEEK(V):? "GaMe OvEr";:POKE V,A:GET X
:GO# S:ENDIF :X=RAND(F)+%1:Y=RAND(F)+%1
:IF A(X,Y)=%0:A(X,Y)=1:ELSE :GO# R:ENDIF

Mit <CONTROL><DELETE BACKSPACE> das :ELSE :GO# R:ENDIF am Ende der abgetrennten Programmzeile löschen.
Mit <CONTROL><INSERT> drei Leerzeichen vor dem A=PEEK... am Anfang der neuen Zeile einfügen und die neue Zeilennummer 152 eingeben und mit <RETURN> in den Speicher übernehmen.

152 A=PEEK(V):? "GaMe OvEr";:POKE V,A:G
ET X
:GO# S:ENDIF :X=RAND(F)+%1:Y=RAND(F)
+%1:IF A(X,Y)=%0:A(X,Y)=1

Mit <CONTROL><DELETE BACKSPACE> das GET X löschen und dann mit <CONTROL><INSERT> 20 Leerzeichen einfügen so dass die 1 am Ende der Zeile an der letzten möglichen Stelle steht. In den so entstandenen Freiraum WHILE STRIG(0):WEND eingeben.

Das eben gelöschte :ELSE :GO# R:ENDIF als neue Zeile 154 wieder einfügen:

154 ELSE :GO# R:ENDIF <RETURN>

Jetzt läßt sich das nächste Spiel mit dem Feuerknopf starten.



Störend wirkt sich jetzt der eingebaute Bildschirmschoner aus; nach ein paar Minuten fangen sich die Farben an zyklisch zu ändern. Jetzt kann man entweder auf eine Taste drücken oder den Timer für den Bildschirmschoner im Programm zurücksetzen lassen:

In Zeile 172 den Befehl POKE 77,0 einfügen:

172 ENDIF :IF K=11:G=%2:H=F:K=%1:L=-%1:M=-%1:GO
# LEFT:ENDIF :IF K=7:G=%3:H=%1:K=-%1:L=%
1:M=%1:GO# LEFT:ENDIF :POKE 77,0:LOOP


Das Programm unter neuen Namen, z.B. G2047JOY.TUR starten und Spaß haben. :mrgreen:

Sleeπ
Benutzeravatar
Sleepy
Night&Day Poster
Night&Day Poster
 
Beiträge: 6636
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Köln

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast