Saltar la navegación

Los eventos del teclado

En este apartado vamos a ver como detectar la pulsación de una determinada tecla sin que se pare la ejecución del programa. En el vídeo adjunto mantenemos la tortuga en movimiento y cambiamos su dirección accionando las teclas 4 y 6 del teclado numérico (flechaIzquierda y flechaDerecha).

ponFoco [FMSLogo]
  Pone el foco (activa) la ventana gráfica de FMSLogo. Esta instrucción es necesaria como paso previo para activar los eventos del teclado.
   
habilitaTeclado [instrucciones al pulsar]
  Activa los eventos del teclado. Cada vez que pulsemos una tecla Logo detendrá lo que esté haciendo en ese momento y ejecutará las instrucciones y/o procedimientos escritos en el corchete, después continuará con el trabajo que había parado.
  Ejemplo:
;cada vez que pulsemos cualquier tecla
;la tortuga gira 20º a la derecha.

ponFoco [FMSLogo]
habilitaTeclado [gd 20]


;al pulsar una tecla se ejecuta
;el procedimiento controlTeclado

para ejemploTeclado
ponFoco [FMSLogo]

habilitaTeclado [controlTeclado]
------------
fin

para controlTeclado
------------
fin
inhabilitaTeclado
Desactiva los eventos del teclado.
leeTecla
Devuelve el código ASCII (número entre 1 y 127) de la última tecla pulsada.
car código ASCII
Devuelve el carácter (letra, número, signo,...) correspondiente al código ASCII indicado
car leeTecla
Utilizando conjuntamente las dos instrucciones anteriores obtenemos el carácter de la última tecla pulsada. Si lo guardamos en una variable podemos preguntar por su valor y ejecutar las instrucciones asociadas con la pulsación de una determinada tecla.
Ejemplo
;sólo si pulsamos la tecla "d" la tortura gira 20 grados

para ejemploTeclado
ponFoco [FMSLogo]

habilitaTeclado [controlTeclado]
------------
fin

para controlTeclado
haz "tecla car leeTecla
si :tecla = "d [gd 20]
------------

fin  

 

(habilitaTeclado [instrucciones al pulsar][instrucciones al leventar])

  Si queremos detectar algunas teclas especiales, como las de movimiento del cursor o las teclas de función, tenemos que usar habilitaTeclado con este formato. En este caso, los códigos que devuelve la instrucción leeTecla son los correspondientes a las letras mayúsculas.
   
  Ejemplos:
;escribe el carácter de la tecla pulsada
ponFoco [FMSLogo]
habilitaTeclado [es car leeTecla]

;escribe el codigo de la tecla incluyendo especiales

ponFoco [FMSLogo]
(habilitaTeclado [es leeTecla][])
 
pixel
Esta instrucción nos devuelve el color del punto de la pantalla (píxel) en el que se encuentra la tortuga, para ello utiliza los números que representan la intensidad de los colores rojo, verde y azul correspondientes.

En el juego de coches que vamos a realizar en las actividades nos servirá para detectar cuando la tortuga toca los límites (de color negro) del circuito.

Ejemplo:
;si la tortuga toca una zona negra
;se ejecutan las instrucciones entre corchetes
si pixel = [0 0 0] [instrucciones]

Actividades

1.- Finalizar el procedimiento denominado juego  de manera que la tortuga girará 20º a la derecha cada vez que pulsemos una tecla .El número de la instrucción repite determina la velocidad de la tortuga, habrá que hacer algunas pruebas para ajustarlo.

para juego
[FMSLogo]

[gd 20]

siempre [ 
40000 []

 

fin
 

 

2.- Escribir un procedimiento de nombre lineas que dibuje una línea vertical de 20 puntos cada vez que pulsemos una tecla (las líneas estarán separadas unas de otras 10 puntos).
para lineas
[ ]

[av re gd sl
                            10 90 ]

fin

3.- Completar el programa adjunto que permite mover la tortuga por la pantalla mediante las teclas 4 y 6 del teclado numérico (flechaIzquierda y flechaDerecha).

para juegoCoches
bp [FMSLogo]
[controlTeclado]
siempre [
40000 []
]
fin

para controlTeclado
haz "tecla
si = "6 [ 30]
si = "4 [ 30]
fin

4.- Ampliar los procedimientos anteriores para mover la tortuga por un circuito, el realizado anteriormente en el procedimiento dibujaCircuito del apartado "Los colores", de manera que si chocamos con los bordes la tortuga vuelva a la posición de salida (utilizaremos la instrucción pixel comentada anteriormente).

para juegoCoches
----------
dibujaCircuito
siempre [
pixel = [ ][
     ponXY    ponrumbo 90]
]
fin

para dibujaCircuito
-----------
fin

para controlTeclado
-----------
fin

5.- Sabemos que la velocidad de la tortuga en el ejercicio anterior depende del número que pongamos en la instrucción repite, cuanto más grande sea más lenta irá, ya que el retraso que se produce es mayor. Queremos modificar el programa anterior para poder controlar la velocidad de la tortuga: si pulsamos la tecla "s" se debe mover más rápida y si pulsamos la tecla "a" el movimiento será más lento. Para conseguirlo, tenemos que crear una variable, denominada velocidad, cuyo valor cambie al pulsar las teclas "a" y "s"; el contenido de esta variable lo pondremos en la instrucción repite para provocar el retraso.

Recordar que la velocidad de la tortuga va a depender de la rapidez del ordenador y, por tanto, hay que hacer varias pruebas para definir los valores numéricos que le asignemos a la variable velocidad.

para juegoCoches
 " 40000 ;crea la variable velocidad
--------
siempre [

repite [ ] ;utiliza la variable
 
--------
]
fin


para controlTeclado
--------
si = "s [
     haz  " 10000] ;cambia velocidad
si =   [
     haz  " 40000] ;cambia velocidad
fin

Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0