El Dudo —o cacho, o Perudo— es el juego de dados de engaño que se juega en casi todas las mesas chilenas. Quise jugarlo online con amigos y no encontré una versión en español que me gustara, así que la hice: dudo.igna.cl (código MIT en GitHub).
El problema: estado compartido en tiempo real
Cada sala es un objeto Game en memoria con jugadores, turno, apuesta vigente y reglas. Los clientes se conectan por WebSocket y el servidor es la única fuente de verdad: valida cada apuesta y manda a cada jugador solo lo que debe ver (nunca los dados ajenos antes del desafío).
Reglas que parecen simples
Los ases son comodines, salvo cuando se apuesta por ases; al cambiar entre unos y otros, la cantidad mínima cambia (de normal a ases, la mitad hacia arriba; de ases a normal, el doble más uno). Esa regla y la del paso tienen tests porque son fáciles de romper.
Reconexión
Un celular que pierde señal no debería sacarte de la partida. Cada jugador tiene un id anónimo persistente y un tiempo de gracia para reconectarse; mientras tanto la partida sigue y el turno no se roba.
Bots
Hay cinco niveles. Los primeros usan probabilidades binomiales (con los ases como comodín, cada dado cuenta con probabilidad 1/3 para una cara normal). El experto además guarda memoria de rondas, estima la tasa de bluff de cada rival y bluffea a propósito de vez en cuando.
Persistencia
Postgres guarda estadísticas, niveles y permite restaurar salas tras un reinicio. Las migraciones se aplican al arrancar.
Qué aprendí
- Un solo proceso con estado en memoria alcanza para cientos de salas pequeñas; no hace falta Redis al principio.
- Limitar la tasa de mensajes por jugador evita abusos con casi cero costo.
- El front en JS vanilla fue suficiente, pero el manejo de estado crece rápido.
Si lo pruebas, me interesa saber qué se siente raro. Y si juegas cacho con otras reglas, cuéntame cuáles.


