¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Máquina de estados de un jugador

Después de esta lección: Puedo modelar a un jugador con una máquina de estados y decir a qué estado pasa con cada evento.

Lección de 60 min2 comandosLaboratorio de desarrollo de juegos: bucle de juego, gravedad y colisiones en el navegador

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

PalabraQué significaEjemplo
Eventoalgo que ocurre: una tecla pulsada, un golpe, un aterrizajekeydown
Estadola situación en que está el jugador ahorasaltando
Transiciónel paso de un estado a otro cuando llega un eventoquieto a corriendo
Máquina de estadosla lista de estados y de transiciones permitidas
Banderauna variable verdadero o falso que recuerda algogameOver

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

Código: web
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

EstadoEventoEstado nuevo
quietoderecha o izquierdacorriendo
quieto o corriendosaltosaltando
corriendopararquieto
saltandoaterrizaquieto
quieto, corriendo o saltandogolpecaido
caidoreiniciarquieto

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

Comando
docker exec jupyter grep -n "gameOver" game/game.js

Se 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

Comando
docker exec jupyter grep -c "addEventListener" game/game.js

Se 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.

Sobre este laboratorio y su código: Laboratorio de desarrollo de juegos: bucle de juego, gravedad y colisiones en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.