Salta al contenuto
Damiano Taverni
EN
← Tutti i case study

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

Segnaposto: screenshot del gioco in arrivo

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

Parliamo del tuo progetto

Raccontami cosa ti serve: ti rispondo entro 1–2 giorni lavorativi con una valutazione onesta e, se ha senso, un preventivo.