Saltar al contenido
Proyectos

Juego de navegador · béisbol

Disponible invictobaseball.com

Invicto

Arma un equipo de 12 jugadores con las plantillas reales del Clásico Mundial de Béisbol, de 2006 a 2026, y simula el torneo.

Invicto simula un torneo automáticamente, desde la fase de grupos hasta cuartos, semifinal y final. Este lineup pierde la final y termina con récord de 5-2.
El torneo se simula después de la selección número 12.
Rol
Solo: diseño, código y publicación
Período
Desde jun 2026
Stack
TypeScript, Vite, Cloudflare Workers, D1, Vitest

Disponible en invictobaseball.com. Código público en GitHub. Estado verificado el 22 oct de 2026.

En números

3,175

registros de jugador por edición: 2,524 jugadores, 23 países, 6 ediciones

20,000

torneos simulados por equipo en la prueba de dificultad

4

idiomas: español, inglés, japonés y coreano

31.6 KB

de JavaScript comprimido con gzip, sin framework de interfaz

Fig. 1 De datos públicos a un torneo con semilla

Al hacer el build

  1. Dos fuentes públicas Las páginas de rosters de Wikipedia de 6 ediciones y la base de datos SABR Lahman.
  2. scripts/build-data.ts Combina y valida los registros, conservando la URL de cada fuente y la hora de descarga. Si una página devuelve menos de 16 equipos, el build se detiene.
  3. 3,175 registros Uno por jugador y edición: 2,524 jugadores de 23 países.

En el navegador

  1. Draft Arma un lineup de 12 jugadores.
  2. Rating del equipo Una media de potencias con p = -4 combina contacto, poder, velocidad, defensa, clutch y pitcheo. Una categoría débil limita todo el lineup.
  3. Torneo Cada tirada usa rngFor(seed, ...path), así el reto diario reproduce las mismas tiradas sin depender del orden de las llamadas.
Mantener una dificultad consistente src/engine/montecarlo.test.ts La prueba simula 20,000 torneos por lineup. Uno de élite debe terminar 7-0 entre el 2% y el 5% de las veces. Con una categoría débil, debe quedar por debajo del 2%.

La idea

Invicto convierte el Clásico Mundial de Béisbol en un reto de siete juegos. Cada tirada te asigna un país y una edición para llenar uno de los 12 puestos de tu equipo, entre los seis Clásicos de 2006 a 2026. Después, trata de terminar 7-0.

Lo que construí

Un proceso de datos combina las plantillas de Wikipedia y la base SABR Lahman en 3,175 registros de jugador por edición. Cada registro conserva la URL de su fuente y la fecha y hora de consulta. La compilación se detiene si una página devuelve menos de 16 equipos. Los datos también permiten detectar automáticamente a quienes batean y lanzan.

La fuerza del equipo usa una media de potencias con exponente -4 sobre contacto, poder, velocidad, defensa, clutch y pitcheo. Así, una categoría débil afecta al equipo completo. El juego está en español, inglés, japonés y coreano. El mismo Worker de Cloudflare usa D1 para registrar estadísticas diarias anónimas, contar una sola vez los resultados duplicados y no guardar IPs ni cookies.

Retos técnicos

  1. 01 Datos públicos imperfectos

    Las plantillas, nombres, posiciones y estadísticas llegan en formatos distintos. El proceso los une, valida cada registro y conserva la fuente de cada fila. Si un registro tiene un error, puedo rastrearlo hasta la página original.

    Dónde está en el código: scripts/build-data.ts (se abre en otra pestaña)

  2. 02 Que terminar 7-0 cueste

    Un equipo fuerte debe tener ventaja y aun así enfrentar un torneo difícil. Una prueba Monte Carlo simula 20,000 torneos por equipo. Un equipo de élite debe terminar 7-0 entre 2% y 5% de las veces; una sola categoría débil debe bajar esa probabilidad a menos de 2%.

    Dónde está en el código: src/engine/montecarlo.test.ts (se abre en otra pestaña)

  3. 03 Las mismas tiradas en el reto diario

    Cada decisión al azar usa una secuencia identificada por la semilla y una ruta de etiquetas. Todos reciben las mismas tiradas en el reto diario, sin importar el orden en que las revelen. Recargar la pestaña permite continuar la misma partida.

    Dónde está en el código: src/engine/rng.ts (se abre en otra pestaña)

Antes y después

AntesDespuésFuente
Primera pantalla con una conexión lentaLa pantalla de inicio esperaba 1.33 MB de datos de plantillas.La pantalla de inicio aparece primero y los datos se cargan al empezar una partida.Commit 465db25, 2 de septiembre de 2026

Lo próximo

Actualizar las plantillas después del próximo Clásico.

Draft de Invicto, ronda 5 de 12: una tirada de Canadá, WBC 2017 encima de la lista de peloteros, con los 12 puestos del lineup en la parte inferior.
Resultados de Invicto: tarjeta de un subcampeonato con récord de 5-2, el lineup de 12 peloteros y el resultado de cada juego. Debajo están los botones Compartir y Copiar tarjeta.

Pruébalo

Enfoques compartidos