Settore: Web app · Progetto personale · Periodo: 2026
Gioco di strategia multiplayer a turni
Web app per giocare online una partita di strategia a turni con amici e bot: stanze in tempo reale via WebSocket, motore di gioco in TypeScript e avversari artificiali fino alla ricerca Monte Carlo, tutto su Cloudflare.
- Tempo reale
- Multiplayer
- 3
- Livelli dei bot
- 0
- Server da gestire
Contesto
Un progetto personale nato per giocare online con gli amici a un gioco di conquista a turni: mappa dei territori, dadi, rinforzi, carte e obiettivi segreti. È diventato un banco di prova per tre temi che ritornano nei progetti per i clienti: stato condiviso in tempo reale, logica di dominio complessa e costi di infrastruttura vicini allo zero.
Cosa fa
- Account con password protette (PBKDF2) e sessioni firmate.
- Stanze con impostazioni decise da chi le crea: password, numero di bot al tavolo, varianti di regole, dadi tirati dal server oppure lanciati dal vivo e inseriti dai giocatori (con validazione lato server).
- Mappa interattiva in SVG, chat e annunci delle battaglie in tempo reale.
- Bot su tre livelli di difficoltà, mescolabili nella stessa partita.
- Pannello di amministrazione, storico e replay delle partite.
Sfide tecniche
Stato condiviso in tempo reale. Ogni stanza è un Durable Object di Cloudflare: un’unica istanza possiede lo stato della partita e lo distribuisce ai giocatori via WebSocket, così le mosse concorrenti non entrano mai in conflitto e non c’è un server da gestire.
Un motore di gioco puro. Le regole vivono in un pacchetto TypeScript senza dipendenze e con test propri: lo stesso codice valida le mosse sul server e alimenta le simulazioni dei bot.
Bot che ragionano. Il livello intermedio usa euristiche e il calcolo esatto delle probabilità di battaglia; il livello difficile usa una ricerca Monte Carlo (MCTS) con determinizzazione delle informazioni nascoste, calibrata facendo giocare i bot tra loro.
Un solo deploy. Un unico Worker serve la pagina, le API REST e i WebSocket; account e partite stanno su D1. Una pulizia programmata elimina le stanze abbandonate e comprime i replay più lunghi.
Il gioco è online su risiko.avren.it, con accesso su invito.
Stack
TypeScript · React · Vite · Cloudflare Workers · Durable Objects · D1 · WebSocket