¿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

Niveles de un juego como datos

Después de esta lección: Puedo describir los niveles de un juego como datos y calcular cuándo aparece cada objeto en cada nivel.

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

Un nivel es una fila de datos

Un nivel de un videojuego se puede describir como datos. Es una fila de una tabla, y cada fila dice desde qué puntuación empieza y cómo cambian la velocidad y el ritmo. Así, hacer el juego más difícil es cambiar la tabla y no reescribir el código.

Al final sabrás leer una tabla de niveles y calcular cuándo aparece cada objeto. Lo harás con las cuatro filas del juego del laboratorio.

Al terminar esta lección

Nota

Puedo describir los niveles de un juego como datos y calcular cuándo aparece cada objeto en cada nivel.

Palabras clave

PalabraQué significaEjemplo
Niveluna etapa del juego con sus propias reglas de dificultadStorm
Dificultadlo difícil que es el juego en cada momento
Escalaun número por el que se multiplica un valor basegravityScale
Intervalo de aparicióncada cuántos fotogramas sale un objeto nuevoSPAWN_EVERY
Plan de apariciónla lista de fotogramas en que sale cada objeto

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Más dificultad es cambiar datos

Si escribes cada nivel dentro del código, cambiar uno obliga a tocar muchas líneas. Es mejor una tabla.

Cada fila tiene un nombre, la puntuación desde la que vale y dos escalas. El código solo busca la fila que toca. Para añadir un nivel se añade una fila.

La tabla de niveles del laboratorio

Código: web
var LEVELS = [
  { name: "Drizzle", from: 0, gravityScale: 1.0, spawnScale: 1.0 },
  { name: "Shower", from: 5, gravityScale: 1.4, spawnScale: 1.25 },
  { name: "Storm", from: 12, gravityScale: 1.8, spawnScale: 1.6 },
  { name: "Meteors", from: 20, gravityScale: 2.4, spawnScale: 2.0 }
];

Toca la última fila alcanzada

El juego recorre la tabla en orden. Empieza por la primera fila. Cada vez que la puntuación llega al from de una fila, esa fila pasa a ser la elegida.

Con 7 puntos se alcanzan las filas de 0 y de 5, pero no la de 12. La última alcanzada es Shower.

Buscar el nivel que toca

Código: web
function levelFor(points) {
  var found = LEVELS[0];
  for (var i = 0; i < LEVELS.length; i++) {
    if (points >= LEVELS[i].from) {
      found = LEVELS[i];
    }
  }
  return found;
}

Cada cuántos fotogramas sale una estrella

La base es SPAWN_EVERY = 50: una estrella cada 50 fotogramas. La spawnScale del nivel la acelera: 50 dividido entre la escala, redondeado al entero más cercano.

Con escala 1,25 salen cada 40 fotogramas. Con 1,6, cada 31, porque 50 entre 1,6 son 31,25. Los fotogramas múltiplos de ese intervalo son los que sacan una estrella.

Un ejemplo con números: cada nivel

NivelDesdeGravedadUna estrella cada
Drizzle00,15 por 1,0 = 0,15050 fotogramas
Shower50,15 por 1,4 = 0,21040 fotogramas
Storm120,15 por 1,8 = 0,27031 fotogramas
Meteors200,15 por 2,4 = 0,36025 fotogramas

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Calcula los cuatro niveles en el laboratorio

El laboratorio tiene un script que lee la tabla de game.js y calcula el resultado de cada fila, justo como la tabla de arriba. Escribe en inglés: levels: 4 y una línea por nivel, con from score y a star every.

Si cambias un número de LEVELS en game.js y repites el comando, las líneas cambian.

Calcular gravedad y ritmo de cada nivel

Comando
docker exec jupyter python3 steps/levels.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Dónde está la tabla dentro del código

La palabra LEVELS aparece en pocas líneas: donde se declara la tabla y donde la recorre levelFor. El comando las busca. Escribe cinco líneas con su número: 15, 28, 29, 30 y 31.

Esa corta lista demuestra la idea de la lección: los niveles viven en un solo sitio.

Buscar dónde se usa la tabla LEVELS

Comando
docker exec jupyter grep -n "LEVELS" 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 cree que un nivel más difícil es el que más cosas lanza. Un juego con demasiados enemigos a la vez es injusto, no difícil. Sube un número cada vez, juega y comprueba que sigue siendo posible ganar.

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.