Existen tres formas de usar el teclado desde SuperBASIC:
- INPUT
- INKEY$
- KEYROW
Con INPUT introducimos una cadena de texto, del tirón, y no podemos hacer nada mientras el usuario no pulse enter. Salvo aventuras, poco uso tiene.
Con INKEY$ podemos ver la respuesta a cierta tecla, ejemplo:
100 IF INKEY$="o" THEN LET X=X-1
Es decir, se usa exactamente igual que en Spectrum, pero tiene una pega importante: retardo inicial. Quiere decir que responde como las teclas en un editor de texto, cuando dejas pulsada una tecla tarda un tiempo en repetir la misma. Esto nos limita su uso al menú de opciones y juegos donde sólo se espera la pulsación de una tecla determinada, pero no nos sirve para juegos en el que la respuesta del teclado es crucial.
Para este último caso tenemos KEYROW, que es por así decirlo lo que los usuarios del BASIC del ZX Spectrum hemos soñado durante años y que teníamos que sustituir por el incómodo IN al puerto correspondiente. KEYROW lee directamente el valor del puerto de las 8 filas de teclas disponibles en el QL. Un ejemplo podría ser:
100 IF KEYROW(5)=128 THEN LET X=X-1
esta línea hace lo mismo que en el anterior ejemplo, mira si se ha pulsado la tecla "o". Pero ojo, si pulsamos simultáneamente alguna tecla más de dicha fila ya no nos funcionará, por lo que deberemos ingeniárnoslas para hacer un uso correcto (eso lo dejo para otro momento).
Bien, llegados a esto es conveniente que toméis contacto con las teclas del QL a través de KEYROW mediante el siguiente cutre-programa:
Código: Seleccionar todo
10 cls
20 AT 0,0: PRINT "FILA 0: "; KEYROW(0)
30 AT 1,0: PRINT "FILA 1: "; KEYROW(1)
40 AT 2,0: PRINT "FILA 2: "; KEYROW(2)
50 AT 3,0: PRINT "FILA 3: "; KEYROW(3)
60 AT 4,0: PRINT "FILA 4: "; KEYROW(4)
70 AT 5,0: PRINT "FILA 5: "; KEYROW(5)
80 AT 6,0: PRINT "FILA 6: "; KEYROW(6)
90 AT 7,0: PRINT "FILA 7: "; KEYROW(7)
100 GOTO 20
Lo se, es muy mejorable,pero es sencillo de entender. Con KEYROW podemos leer las filas 0 a 7 (8 en total) y nos devolverá un valor decimal entre 0 (ninguna tecla pulsada) y 255 (todas las teclas pulsadas). Para entender el resultado basta saber como se aplican los valores en decimal de cada bit dentro de un byte (que es lo que estamos leyendo):
1
2
4
8
16
32
64
128
Cada fila tiene 8 teclas, y según su posición nos devolverá uno de los valores anteriores al ser pulsada.
Como ejemplo rápido supongamos que usamos o y p para mover una raqueta dentro de un campo de juego:
Código: Seleccionar todo
100 MODE 8
110 PAPER 0: INK 7: CLS
120 BORDER 4,6
130 LET x=16
140 AT 18,x: PRINT "----"
150 IF KEYROW(5)=128 AND x>0 THEN AT 18,x+3: PRINT " ": LET x=x-1
160 IF KEYROW(4)=32 AND x<32 THEN AT 18,x: PRINT " ": LET x=x+1
170 goto 140
Tachán! ya tenemos realizada la primera parte de un juego de frontón o Arkanoid.
Mañana más.