![]() |
![]() |
Wahrscheinlich haben Sie während Ihrer Spieleprogrammierung in den letzten Kapiteln eine Funktion am C16 bitter vermisst: Die direkte Reaktion auf einen Tastendruck. Die einzige Möglichkeit, die Tastatur einzubeziehen, ist bisher ja der Input-Befehl. Für viele Fälle, insbesondere für Spiele, in der eine Spielfigur gesteuert werden soll, Pfeil nach rechts - Figur nach rechts usw., ist Input völlig ungeeignet: "In welche Richtung wollen Sie?" - "Rechts+ÉNTER" - "Vielen Dank, es geht jetzt nach rechts." Toll. Nein, so kann keine Spannung beim Formel-1-Fahren aufkommen.
Ein Tastendruck ist das Beispiel eines Ereignisses, auf das das Programm irgendwie reagieren soll. Der Vorteil des C16-Systems ist u.a., dass so etwas darauf einfach zu programmieren ist - ganz im Gegensatz zu den grösseren, heute üblichen Programmiersystemen auf dem PC.
GETKEY ist INPUT noch am ähnlichsten. Bei "GETKEY A$" wartet der Computer einfach auf den nächsten Tastendruck. Und übergibt das Ergebnis - also das Zeichen, das der gedrückten Taste entspricht - in A$. Auf ein ENTER wartet der Computer nicht, sondern er reagiert sofort. Dadurch ist es hier natürlich nicht möglich, auf einfache Weise mehr als ein Zeichen zu übergeben - Strings müssen mit INPUT übergeben werden.
Wieviel Programmzeilen brauchen Sie für einen einfachen Editor auf dem PC? GETKEY macht Ihnen die Arbeit sehr einfach:
10 REM EINFACHER EDITOR FUER DEN C16 20 LET A$="" 30 DO WHILE A$<>"&" 40 GETKEY A$ 50 IF A$<>"&" THEN PRINT A$; 60 LOOP
Das war's schon. Probieren Sie es aus! Sie können nun ganz normal auf dem C16 tippen, Zeilenumbrüche eingeben, sogar mit Backspace (rückwärts löschen) und den Cursortasten arbeiten. Mit dem &-Zeichen verlassen Sie den Editor wieder. Alles kein Problem. Weil der C16 alle Steuerzeichen A$ übergibt und der PRINT-BEfehl die Steuerzeichen auch wieder korrekt umsetzt.
10 REM TEST VOn GET 20 LET A$="" 30 DO WHILE A$<>"&" 40 LET A$="" 50 DO WHILE A$="" 60 GET A$ 70 IF A$="" THEN PRINT "X"; 80 IF A$<>"" THEN PRINT A$ 90 LOOP 100 LOOP
Auch dieses Testprogramm verlassen Sie mit "&" (oder mit einem BREAK mittels Tabtaste). Das Programm spuckt laufend Zeichen aus. Wenn keine Taste gedrückt ist, spuckt es ein "X" aus, ansonsten das Tastaturzeichen. Aus gutem Grund wurde in Zeile 80 das Semikolon weggelassen. So sieht man am Besten, was passiert, wenn eine Taste gedrückt wird.
Was wir als Ergebnis erwarten würden, wäre z.B.:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXD D D D XXXXXXXXXXXXXXXXXXXXXXXX
...wenn ein "D" gedrückt und wieder losgelassen wurde.
Wir erhalten aber:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXD XXD XD XD XXXXXXXXXXXXXXXXXXXXXXXX
Was passiert da? Nun, obwohl wir eine Taste gedrückt halten, wird offenbar nur ab und an von GET ein Zeichen "gesehen". Das liegt daran, dass die Dauerfunktion einer Taste mit einer bestimmten Rate Tastensignale abgibt ("feuert") und diese sehr viel langsamer ist als unser Programm! Deshalb dauert es zwei bis drei Schleifendurchläufe, bis GET wieder einem Signal begegnet. Was kann man tun? Man muss die Abfrage soweit verlangsamen, dass GET seltener nachschaut, als die Taste "feuert". Übungsaufgabe!
Schreiben Sie ein kleines Spiel, in dem auf dem Bildschirm ein Auto herumfährt. Sie können das Auto nicht stoppen, Sie können es nur nach rechts und links steuern. Auf dem Bildschirm befindet sich auch ein zweites Auto. Das währt vom Computer gesteuert, d.h. zufällig in der Gegend herum. Und Sie müssen das zweite Auto fangen!