Así se hace un juego: Snake de Daily Challenge
Snake es uno de los 36 juegos de Daily Challenge, y de los más sencillos de leer: unas 180 líneas de JavaScript sin motor ni librerías. Aquí se recorre entero, pieza por pieza, con el código de verdad. Conviene haber hecho las primeras unidades de estructuras de datos (arreglos, colas, BFS), porque Snake las usa todas.
0/16 lecciones0 xp0 días de racha
Unidad 1El proyecto
- 1Qué vamos a desarmarDaily Challenge, su Snake y por qué está hecho en JavaScript puro, sin motor ni librerías.Empezar →
- Cómo se divide el códigoLas carpetas, el contrato que cumple cada juego y por qué la lógica nunca toca la pantalla.
Unidad 2Gráficos
- Una pantalla de 160 × 192La pantalla virtual de la Atari, cómo se agranda sin ponerse borrosa y dónde cae cada casilla de Snake.
- Letras, sprites y paletaUna fuente de 3 × 5 hecha de unos y ceros, el bicho de premio de 1 bit y los 128 colores de la Atari.
Unidad 3El bucle y los controles
- 30 ticks por segundo, siemprerequestAnimationFrame, el acumulador y por qué el juego avanza a pasos fijos aunque la pantalla vaya a 60 o a 120.
- Una bitmask por tickCuatro direcciones y un botón en un número del 0 al 31: teclado, cruceta y swipes hablan el mismo idioma.
Unidad 4La lógica de Snake
- El cuerpo es una colaLa serpiente como arreglo de casillas: entra una cabeza por delante, sale la cola por detrás, y nunca da vuelta en U.
- Choques, comida y puntosCuándo una casilla está libre, por qué la cola no estorba, cómo se crece, cuánto vale cada fruta, el hambre y el bicho de premio.
- Mapas de texto y una arena enteraDe un dibujo en texto a una cuadrícula, los muros extra de cada día y el recorrido que evita partir la arena en dos.
Unidad 5Azar con semilla
- El mismo azar para todosPor qué Math.random no sirve para un reto diario: mulberry32, la fecha como semilla y la misma partida en el teléfono y en el servidor.
Unidad 6Sonido
- Un chip de sonido con Web AudioSin un solo archivo de audio: osciladores cuadrados y triangulares, una envolvente, ruido blanco y los eventos del juego.
- Música desde una recetaRecetas de texto, notas MIDI y hercios, una melodía que escribe la semilla del día y un secuenciador que no se atrasa.
Unidad 7El servidor y el reto diario
- El servidor no se cree tu puntajeEl teléfono manda los botones de cada tick, no un número; el servidor vuelve a jugar la partida con el mismo código y saca el puntaje él solo.
- El fantasma: ver jugar a otro sin vídeoSi el juego es determinista, ver la partida de otro es recibir sus botones y simularlos. Medio segundo de retraso y casi ningún byte.
Unidad 8Multijugador en línea
- Snake versus: una simulación, varios jugadoresSnakeVs recibe un input por jugador en cada tick, mueve a todas las serpientes a la vez y reparte los puntos por puesto.
- Lockstep: todos ven la misma partidaUn anfitrión junta los botones y cada 200 ms manda un turno; todos simulan sólo con esos turnos y en orden. Paquetes perdidos, jugadores que se van y el precio del retraso.