Ir al contenido
Ayotl

← Todas las notas

20 de octubre de 2026 · En Kazan

Un juego de estrategia en línea con unos bytes por tick

La pregunta era si un juego de ciudades y ejércitos podía ser en tiempo real desde el teléfono, con varios en el mismo mapa. Puede, con una idea de 1996: no se manda el mundo, se mandan las órdenes, y cada teléfono simula lo mismo.

El primer impulso es mandar el estado: dónde está cada soldado, cuánta vida tiene cada casa. Con doscientas unidades a diez veces por segundo son cientos de kilobytes por segundo por jugador, y en un teléfono con datos eso no se sostiene. La alternativa es la de los juegos de estrategia de los noventa: cada cliente corre la simulación completa, y lo único que viaja es «en el tick 1 240, el jugador 2 mandó estas tropas a tal casilla». Unas decenas de bytes.

Para que funcione, la simulación tiene que ser determinista: con las mismas órdenes, el mismo resultado en todos, siempre. Eso impone reglas incómodas. Nada de Math.random: el azar sale de un generador propio guardado en el estado. Nada de Math.sin ni Math.atan2, que un motor puede redondear distinto que otro; sólo sumas, productos y Math.sqrt, que la norma obliga a redondear igual en todas partes. Y recorrer siempre las listas en el mismo orden.

// Dos partidas con la misma semilla y las mismas órdenes acaban idénticas,
// y una copia serializada a medio camino sigue igual que el original.
const a = partida(3000, -1), b = partida(3000, -1), c = partida(3000, 1500);
if (a !== b || a !== c) process.exit(1);
La prueba que corre antes de cada cambio de reglas.

El servidor no simula para los demás: sólo ordena el tiempo. Cada 100 ms cierra un tick, toma las órdenes que llegaron, les pone el número de tick y las reparte. Cada 5 segundos manda un resumen del estado (un hash de las vidas, posiciones y recursos); si a un cliente no le cuadra, pide el estado completo y sigue desde ahí. Quien entra a media partida recibe ese estado completo una vez. Y las computadoras rivales juegan desde el servidor: sus órdenes viajan como las de cualquiera.

Lo que se gana con esto es más de lo que parece. Mientras estás conectado, es en tiempo real: ves llegar al enemigo y mandas a tu gente. Mientras no estás, tu ciudad se defiende sola, porque la simulación no necesita al jugador. Y un tick de una partida de cuatro cuesta cinco centésimas de milisegundo en el servidor: un proceso aguanta cientos de islas.

Lo que sigue costando es lo que cada teléfono simula. Con cuatro u ocho jugadores sobra; para veinte habría que dejar de mirar todas las unidades enemigas en cada tick y partir el mapa en zonas. Por ahora la isla es de cuatro, y el volcán se encarga de que ninguna partida dure para siempre.

Todas las notas