miércoles, 18 de noviembre de 2015

Haciendo uso (correcto) del Joystick desde BASIC. ZX Interface II.

¿Que sería de nuestros Spectrum sin un Joystick? 

Pues una fuente de frustración en muchos juegos y situaciones. 

Vamos a ver como hacer un uso efectivo de la entrada del Joystick desde el código BASIC. 

La mágica función INKEY$ nos deja leer las entradas del teclado y del mando en "tiempo real", pero, tiene un problema: 

¿Como identificamos que la palanca se ha girado a la derecha y que le hemos dado a disparar, a la vez?. 

Pues no podemos. 

Para hacer las cosas bien, tenemos que leer de los puertos del mando, directamente. Para ello, asignamos el valor del puerto del mando, a una variable usando IN. 

LET a = IN 61438
¿Sencillo, verdad?. Bueno tiene truco. 

La variable contendrá un valor numérico que representa una secuencia de bits. 

Dicha secuencia, tiene la información real de lo que ha pasado.

  • bit 0 : disparo 
  • bit 1 : arriba 
  • bit 2 : abajo
  • bit 3 : derecha 
  • bit 4 : izquierda 

Ah, otra cosa : 

  • El mando "1", se lee con IN 61438. 
  • El mando "2", se lee con IN 63486.

Como un ejemplo vale más que mil palabras, he aquí un sencillo programa de dibujo, que hace uso de lo que hemos explicado arriba.

1 REM  * Programa de dibujo *
5 CLS
10 REM *Posicion inicial en pantalla *
15 LET x=0: LET y=80
17 PRINT AT 19,1;"Pulsa Q para salir"
20 GO SUB 1000: REM * nos vamos a leer el puerto del mando 1*
30 IF disp=1 THEN PLOT x,y
40 GO TO 20
1000 IF INKEY$="Q" OR INKEY$="q" THEN GO TO 2000
1005 LET a=IN 61438
1010 IF a>127 THEN LET a=a-128
1020 IF a>63 THEN LET a=a-64
1030 IF a>31 THEN LET a=a-32
1040 IF a>15 THEN LET a=a-16: IF x<255 THEN LET x=x+1
1050 IF a>7 THEN LET a=a-8:     IF x>0 THEN LET x=x-1
1060 IF a>3 THEN LET a=a-4:     IF y<175 THEN LET y=y+1
1070 IF a>1 THEN LET a=a-2:     IF y<>0 THEN LET y=y-1
1080 LET disp=a
1090 RETURN
2000 CLS : PRINT AT 1,1;"Bye"
Si pulsas disparar, dejará de pintar, aunque se seguirá moviendo el cursor (invisible). 

Las mates son fáciles, vamos comprobando el valor de a, y vamos restando para sacar los valores de los bits que nos interesan. 

En la imagen, se ven las lineas rectas, porque he emulado la entrada del mando usando las teclas del teclado. 

No hay nada mejor que el olor a código por la mañana ;). 




















No hay comentarios: