'============================================================================
' (p)'23/02/2003 by East-Power-Soft
'
' Tipp 6: Nutzen der INP(&H60) Funktion für eine schnelle Tastaturabfrage.
'============================================================================

SCREEN 12

'============================================================================
' Beispiel mit INKEY$
'============================================================================
COLOR 15
PRINT "Dieses Beispiel zeigt die Verwendung von INKEY$ zur Tastaturabfrage."
PRINT "Bewege das Viereck innerhalb des Kastens mit den Cursortasten."
PRINT "Wie man merkt, vergeht zwischen Tastendruck und Reaktion eine gewisse"
PRINT "Zeit. Diese Zeit wird Tastaturrepeat genannt. Leider kann man diese Zeit"
PRINT "nicht auf 0 heruntersetzen und gerade bei Spielen ist das höchst ungünstig."
COLOR 14: PRINT "Weiter mit RETURN."

COLOR 11
LOCATE 10
PRINT "+------------------------------------------------------------------------------+"
FOR I = 1 TO 15
PRINT "|                                                                              |"
NEXT
PRINT "+------------------------------------------------------------------------------+"

Z = 20: S = 39
Zalt = Z: Salt = S
LOCATE Z, S: PRINT CHR$(219);

DO: SELECT CASE UCASE$(INKEY$)
   CASE CHR$(0) + CHR$(&H48) '---> Hoch
      IF Z > 11 THEN Z = Z - 1: GOSUB Bewegung
   CASE CHR$(0) + CHR$(&H50) '---> Runter
      IF Z < 25 THEN Z = Z + 1: GOSUB Bewegung
   CASE CHR$(0) + CHR$(&H4B) '---> Links
      IF S > 2 THEN S = S - 1: GOSUB Bewegung
   CASE CHR$(0) + CHR$(&H4D) '---> Rechts
      IF S < 79 THEN S = S + 1: GOSUB Bewegung
   CASE CHR$(&HD): EXIT DO   '---> RETURN
END SELECT: LOOP

'============================================================================
' Beispiel mit INP(&H60)
'
' WICHTIG: Bei der Anwendung des INP(&H60) müssen die Codes für die abzu-
' fragenden Tasten ermittelt werden, da diese nicht ihren ASCII's
' entsprechen. Ausserdem sollte man sich immer ein Hintertürchen
' zum Beenden der Abfrageroutine offenhalten, da diese Abfrage so
' schnell ist, das am Ende nicht einmal mehr der berühmte Affengriff geht.
'============================================================================
CLS
COLOR 15
PRINT "Nun noch einmal das selbe, allerdings mit INP(&H60)."
PRINT "Bewege das Viereck innerhalb des Kastens mit den Cursortasten."
PRINT "Diesmal ist das ganze so schnell, daß wir sogar eine Kunstpause einbauen müssen."
COLOR 14: PRINT "Ende mit ESC."

COLOR 11
LOCATE 10
PRINT "+------------------------------------------------------------------------------+"
FOR I = 1 TO 15
PRINT "|                                                                              |"
NEXT
PRINT "+------------------------------------------------------------------------------+"

Z = 20: S = 39
Zalt = Z: Salt = S
LOCATE Z, S: PRINT CHR$(219);

DO: SELECT CASE INP(&H60)
   CASE &H48      '---> Hoch
      IF Z > 11 THEN Z = Z - 1: GOSUB Bewegung1
   CASE &H50      '---> Runter
      IF Z < 25 THEN Z = Z + 1: GOSUB Bewegung1
   CASE &H4B      '---> Links
      IF S > 2 THEN S = S - 1: GOSUB Bewegung1
   CASE &H4D      '---> Rechts
      IF S < 79 THEN S = S + 1: GOSUB Bewegung1
   CASE &H81: END '---> Escape
END SELECT: LOOP

Bewegung: '---> Bewegungsroutine für INKEY$
LOCATE Zalt, Salt: PRINT " ";
LOCATE Z, S: PRINT CHR$(219);
Zalt = Z: Salt = S
RETURN

Bewegung1: '---> Bewegungsroutine für INP(&H60)
LOCATE Zalt, Salt: PRINT " ";
LOCATE Z, S: PRINT CHR$(219);
Zalt = Z: Salt = S
'---> löschen des Tastaturpuffers, sonst piepts
WHILE INKEY$ <> "": WEND
FOR P = 0 TO 10000: NEXT '---> eine kleine Kunstpause.
RETURN