Un jugador está siempre en un solo estado
Una máquina de estados es un modelo donde un personaje está siempre en un solo estado y cambia cuando ocurre un evento. Es la forma más clara de decidir qué puede hacer un jugador en cada momento.
Al final sabrás dibujar los estados de un jugador y decir a cuál pasa con cada evento. Un jugador que salta no puede saltar otra vez en el aire, y esta lección explica cómo se escribe esa regla.
Al terminar esta lección
Nota
Puedo modelar a un jugador con una máquina de estados y decir a qué estado pasa con cada evento.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Evento | algo que ocurre: una tecla pulsada, un golpe, un aterrizaje | keydown |
| Estado | la situación en que está el jugador ahora | saltando |
| Transición | el paso de un estado a otro cuando llega un evento | quieto a corriendo |
| Máquina de estados | la lista de estados y de transiciones permitidas | |
| Bandera | una variable verdadero o falso que recuerda algo | gameOver |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un evento es algo que pasa
Un juego no pregunta en cada fotograma si el jugador pulsó una tecla. El navegador avisa con un evento cuando se pulsa o se suelta una tecla.
El código solo anota lo que pasó, y el bucle lo lee después. En este juego, el diccionario keys recuerda si la flecha izquierda o la derecha está pulsada en este momento.
Anotar las teclas pulsadas
var keys = { left: false, right: false };
document.addEventListener("keydown", function (event) {
if (event.key === "ArrowLeft") { keys.left = true; }
if (event.key === "ArrowRight") { keys.right = true; }
});
document.addEventListener("keyup", function (event) {
if (event.key === "ArrowLeft") { keys.left = false; }
if (event.key === "ArrowRight") { keys.right = false; }
});Los estados dicen qué puede hacer el jugador
Imagina un juego de plataformas. El jugador puede estar quieto, corriendo, saltando o caído. En cada estado, unos eventos valen y otros no.
Un jugador que salta ignora otro salto hasta que aterriza. Un jugador caído no hace nada hasta que se reinicia. Cada regla es una transición: un estado, un evento y el estado nuevo.
Las transiciones de un jugador de plataformas
| Estado | Evento | Estado nuevo |
|---|---|---|
| quieto | derecha o izquierda | corriendo |
| quieto o corriendo | salto | saltando |
| corriendo | parar | quieto |
| saltando | aterriza | quieto |
| quieto, corriendo o saltando | golpe | caido |
| caido | reiniciar | quieto |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El juego del laboratorio tiene dos estados
Catch the stars no es una máquina de cuatro estados. Tiene solo dos: se está jugando o ha terminado la partida. Lo recuerda una bandera, gameOver, que vale falso o verdadero.
El primer comando busca esa palabra en game.js. Escribe seis líneas con su número. Dicen dónde se declara, se pone en falso, se comprueba, se activa, se dibuja el mensaje y se lee la tecla Espacio.
Buscar dónde se usa la bandera gameOver
docker exec jupyter grep -n "gameOver" game/game.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cuenta los oyentes de eventos del juego
Cada addEventListener es un oyente: espera un evento y ejecuta una función. El segundo comando cuenta las líneas que lo contienen en game.js.
Escribe solo un número: 6. Son los dos de las teclas, los tres de los botones en pantalla (pulsar, soltar y salir) y el del botón de reiniciar.
Contar los oyentes de eventos
docker exec jupyter grep -c "addEventListener" game/game.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente usa una bandera para cada cosa: saltando, corriendo, caido. Entonces el juego puede creer que el jugador está saltando y caído a la vez. Con una sola variable de estado eso es imposible, porque solo guarda uno.