Come Ho Creato un Gioco da Tavolo Multiplayer Online da Zero

Costruire un sito web è una cosa. Costruire la piattaforma multiplayer online di un gioco da tavolo — con intelligenza artificiale, sistema di rating e partite competitive in tempo reale — è tutta un'altra storia.
Skèmino è un gioco da tavolo strategico che abbiamo creato con ChainCardGame. Unisce tre classici intramontabili — morra cinese, scacchi e domino — in un'esperienza unica. Si gioca su un tabellone di 36 caselle con carte tematiche, ed è semplice da imparare ma difficile da padroneggiare. Esiste come gioco fisico acquistabile sullo shop, con tanto di Academy dedicata a strategie e tattiche avanzate.
Io mi sono occupato di tutta la parte tech: ho sviluppato la versione multiplayer online da zero. Puoi giocare contro amici, contro sconosciuti tramite matchmaking, o contro un'intelligenza artificiale che calcola migliaia di mosse al secondo.
In questo articolo ti racconto come ho costruito la piattaforma da zero: le scelte tecniche, le sfide più ostiche, l'architettura server-authoritative che impedisce i trucchi, e l'IA che ho sviluppato ispirandomi a Stockfish. Che tu sia uno sviluppatore curioso o semplicemente appassionato di giochi, qui dentro trovi la storia vera di un progetto ambizioso — con tutti gli errori e le scoperte lungo il percorso.
Cos'è Skèmino: le regole in breve
Skèmino è un gioco da tavolo strategico per due giocatori. Ecco le basi:
- 🃏 39 carte divise in 3 semi: Pietra (P), Forbici (F) e Carta (C) — 13 carte per seme
- 📐 Griglia 6x6 con 4 vertici strategici (gli angoli) che danno vantaggi speciali
- ⚔️ Sistema a doppia valutazione: le carte si confrontano prima per seme (Pietra batte Forbici, Forbici batte Carta, Carta batte Pietra — la Morra Cinese) e poi per valore numerico se sono dello stesso seme
- ♟️ Turni alternati: il Bianco muove sempre per primo, come negli scacchi
- 🏆 4 condizioni di vittoria (chiamate "Ere") che rendono ogni partita diversa
Le 4 Ere sono il cuore del gioco:
ERA1 — Vittoria per vertice. Piazzi la tua ultima carta su un vertice che controlli e vinci istantaneamente. Ma attenzione: l'avversario ha 30 secondi per giocare una carta "Ribaltone" che blocca la tua vittoria.
ERA2 — Saturazione. Nessun giocatore può fare mosse valide. Vince chi ha il punteggio in mano più basso.
ERA3 — Esaurimento mazzo. Tutte le carte sono state giocate. Anche qui vince il punteggio più basso.
ERA4 — Ribaltone. La meccanica più adrenalinica: se l'avversario sta per vincere con ERA1, hai 30 secondi per contrattaccare con una carta che blocca tutto e ribalta la partita.
Il risultato è un gioco che si impara in 5 minuti ma che richiede mesi per padroneggiare — esattamente come gli scacchi.
Perché portare Skèmino online
Skèmino funzionava perfettamente come gioco da tavolo fisico, ma aveva un limite evidente: servivano due persone nella stessa stanza con il gioco davanti. Volevamo portarlo online per permettere a chiunque di giocare con chiunque, ovunque nel mondo.
Ma non volevo un'implementazione banale. Volevo:
- ⚡ Partite in tempo reale, non a turni asincroni via email
- 🤖 Un'intelligenza artificiale che fosse davvero una sfida, non un bot che gioca a caso
- 🏅 Un sistema di rating tipo Chess.com per dare significato competitivo alle partite
- 🔒 Un'architettura anti-cheat dove il server ha l'ultima parola su ogni mossa
- 📱 Un'esperienza che funzionasse su desktop e mobile senza compromessi
Il progetto è cresciuto da "facciamo una cosa semplice" a un sistema con migliaia di righe di codice, un game engine server-side, un'IA con ricerca ad albero e un sistema di matchmaking con rating ELO. Il classico scope creep, ma questa volta ero io il committente, quindi nessuno poteva lamentarsi.
Lo stack tecnologico
Dopo settimane di ricerca e prove, ecco lo stack che ho scelto e perché.
Frontend: Vue + Vite
- 🖥️ Vue con Composition API e
<script setup>— perfetto per gestire lo stato complesso di un gioco in tempo reale con composables riutilizzabili - ⚡ Vite come bundler — build velocissime e Hot Module Replacement istantaneo durante lo sviluppo
- 🎨 Tailwind CSS per lo styling — design tokens personalizzati per il tema del gioco
- 📦 Pinia per lo state management — gestisce lo stato della partita, dell'autenticazione e delle performance
- 📱 PWA — installabile come app nativa su mobile
Backend: Express + Socket.IO
- 🚀 Express con Node.js — il server che ospita il game engine e le API REST
- 🔌 Socket.IO per la comunicazione in tempo reale — bidirezionale, affidabile, con reconnection automatica
- 🗄️ Supabase (PostgreSQL) per il database — utenti, partite, rating, amicizie
- 🔐 Autenticazione con Supabase Auth + Google OAuth
- 📊 Redis per il caching in produzione — sessioni, stato partite attive, leaderboard
Deploy
- 🌐 Vercel per il frontend (SPA con PWA)
- 🚂 Railway per il backend (Node.js containerizzato)
- 🗃️ Supabase per database e autenticazione
La scelta di separare frontend e backend su piattaforme diverse è stata deliberata: il frontend è statico e beneficia del CDN globale di Vercel, mentre il backend ha bisogno di un server persistente per mantenere le connessioni WebSocket attive. Se vuoi capire la differenza tra un progetto su misura come questo e una soluzione preconfezionata, ne parlo nel confronto WordPress vs sito custom.

Come funziona: il server decide tutto
La decisione più importante del progetto è stata semplice: nessuno può barare.
In molti giochi online, il browser del giocatore gestisce la logica di gioco e il server si limita a fare da postino. Comodo, ma significa che chiunque con un minimo di competenza tecnica può manipolare le mosse.
Skèmino funziona al contrario: ogni mossa passa dal server, che verifica se è valida prima di accettarla. Il browser invia solo l'intenzione ("voglio piazzare questa carta qui"), il server controlla tutto — è il tuo turno? La casella è libera? La mossa rispetta le regole? — e solo se tutto è corretto comunica il risultato a entrambi i giocatori.
Il risultato? Anche se qualcuno prova a manipolare il gioco dal browser, non succede nulla. Il server ha l'ultima parola su ogni mossa.
Partite in tempo reale e matchmaking
Giocare online significa gestire connessioni instabili, latenza e giocatori di livello diverso. Ecco come ho affrontato queste sfide.
Comunicazione istantanea
Le mosse vengono trasmesse tramite WebSocket — una connessione persistente tra browser e server che permette di scambiare dati in millisecondi. Se la connessione cade (cambio rete, WiFi instabile), il sistema riprova automaticamente e recupera la sessione. Il giocatore disconnesso ha un tempo limitato per rientrare, altrimenti perde per timeout.
Matchmaking ispirato a Chess.com
Il matchmaking non è casuale. Ho implementato un sistema basato su ELO, lo stesso tipo di rating usato negli scacchi online:
- 🎯 Avversari bilanciati — il sistema cerca giocatori con un rating simile al tuo, allargando il range solo se non trova nessuno
- 📈 Rating che si stabilizza — i nuovi giocatori salgono o scendono più velocemente, poi il rating si stabilizza man mano che giocano più partite
- ⏱️ Controlli di tempo — Bullet, Blitz, Rapido e Classico, ciascuno con il proprio rating separato
L'intelligenza artificiale: giocare contro il computer
Questa è la parte di cui sono più orgoglioso. Non volevo un bot che giocasse a caso — volevo un avversario che pensasse davvero, ispirandomi ai motori scacchistici professionali.
Come ragiona l'IA
L'IA simula le mosse future: "se io gioco qui, l'avversario risponderà lì, e poi io potrò fare quest'altra mossa...". Lo fa per diversi livelli di profondità, valutando migliaia di posizioni al secondo. A ogni posizione assegna un punteggio — chi controlla i vertici, chi ha carte più forti, chi è in vantaggio — e sceglie la mossa che porta al risultato migliore.
L'aspetto più difficile è stato l'ottimizzazione: con 36 caselle e 39 carte, le combinazioni possibili sono enormi. Ho implementato tecniche di "potatura" per scartare automaticamente le mosse inutili e concentrare il calcolo solo su quelle che contano davvero.

6 livelli di difficoltà
L'IA ha 6 livelli, dal principiante all'esperto:
| Livello | Descrizione |
|---|---|
| Facile | Perfetto per imparare le regole senza frustrazioni |
| Medio | Inizia a fare piani semplici |
| Difficile | Anticipa le tue mosse e contrattacca |
| Avanzato | Gioca in modo strategico e sfrutta le debolezze |
| Esperto | Molto difficile da battere |
| Maestro | Usa le stesse tecniche dei motori scacchistici professionali |
La differenza tra Facile e Maestro è abissale. Il Facile guarda solo la prossima mossa. Il Maestro pianifica molte mosse in avanti, ricorda le posizioni già analizzate e ordina le mosse per efficienza — esattamente come fanno i migliori motori di scacchi.
Un dettaglio importante: l'IA gira in un processo separato dal gioco, quindi mentre il computer pensa l'interfaccia resta fluida. Niente blocchi, niente rallentamenti.
Le sfide più ostiche
Nessun progetto ambizioso va liscio. Ecco i problemi che non mi aspettavo.
Far funzionare tutto su mobile
Adattare un tabellone 6x6 con carte, timer e informazioni a uno schermo da 5 pollici è stato più difficile del previsto. La soluzione finale si ispira a Chess.com: il tabellone occupa tutta la larghezza disponibile, le carte in mano stanno in un pannello scorrevole in basso, e il layout funziona a qualsiasi livello di zoom del browser.
La velocità conta
Ogni mossa deve fare il viaggio dal browser al server e ritorno. Se questo viaggio è troppo lento, il gioco sembra "laggoso" e l'esperienza ne risente. Ho dovuto ottimizzare ogni passaggio per rendere le mosse praticamente istantanee, anche su connessioni non perfette.
L'IA che impazzisce
Il bug più insidioso è stato nell'IA: a volte faceva mosse apparentemente casuali. Il problema? Una questione di "prospettiva" nel calcolo — l'IA confondeva il suo vantaggio con quello dell'avversario. Ci ho messo giorni per trovarlo. Un errore logico sottile che produceva risultati caotici solo in certe situazioni.
Analisi delle partite
Come gli scacchi permettono di rivivere e studiare le partite giocate, anche Skèmino ha il suo sistema di notazione: la PSN (Portable Skèmino Notation). Ogni partita viene registrata con tutti i dettagli — giocatori, rating, mosse, catture, conquiste di vertici — in un formato che permette di esportare, importare e analizzare le partite. Una funzionalità che i giocatori competitivi adorano.
Cosa ho imparato
Costruire un gioco multiplayer online mi ha insegnato cose che nessun tutorial copre:
-
🏗️ Le fondamenta contano più di tutto. La decisione di far controllare ogni mossa dal server, presa il primo giorno, ha evitato mesi di problemi. Le scelte architetturali fatte all'inizio pesano dieci volte di più di quelle fatte dopo.
-
🧪 Testa tutto, poi testa ancora. Ogni regola, ogni caso limite, ogni condizione di vittoria va testata. Ho trovato bug nel Ribaltone (ERA4) che emergevano solo in situazioni specifiche dopo decine di mosse.
-
📱 Il mobile non è un ripensamento. La metà dei giocatori gioca da mobile. Se non progetti per mobile dall'inizio, lo riprogetti dopo — ed è peggio.
-
🤖 L'IA è un progetto nel progetto. Pensavo che l'IA fosse "un algoritmo". In realtà è un sistema enorme e complesso, quasi quanto il gioco stesso.
-
🔄 Le disconnessioni sono la norma. Su mobile, le connessioni cadono continuamente. Il sistema deve gestire riconnessioni e ripristino dello stato con grazia, non come eccezioni.
Domande frequenti
Skèmino è gratis?
Sì, la versione online è completamente gratuita. Puoi giocare contro altri giocatori o contro l'IA senza pagare nulla su skemino.chaincardgame.com. Se preferisci la versione fisica, puoi acquistarla sullo shop di ChainCardGame.
Dove posso imparare le strategie?
L'Academy di ChainCardGame contiene 20 articoli organizzati per livello: regole base, setup, tattiche avanzate e strategie di gioco. Ogni articolo include esempi pratici e analisi turno per turno.
Posso giocare da mobile?
Assolutamente sì. Skèmino è una PWA (Progressive Web App): funziona nel browser su qualsiasi dispositivo e puoi anche installarla come app dalla home screen del telefono. L'interfaccia è stata progettata specificamente per funzionare sia su desktop che su mobile.
Come funziona il matchmaking?
Il sistema cerca avversari con un rating ELO simile al tuo. Se non trova nessuno nella tua fascia, allarga gradualmente il range. Le partite sono bilanciate: non ti troverai mai un principiante contro un esperto, a meno che non ci siano pochissimi giocatori online.
L'IA è davvero forte?
Dipende dal livello. Il livello Facile è pensato per imparare le regole senza frustrazioni. Dal livello Difficile in su, l'IA inizia a pianificare strategie a lungo termine ed è una sfida seria. Il livello Maestro analizza 12 livelli di profondità e usa le stesse tecniche dei motori scacchistici professionali.
Che tecnologie hai usato?
Vue con Vite per il frontend, Express con Socket.IO per il backend, Supabase per database e autenticazione, Redis per il caching, e Vercel + Railway per il deploy. L'IA è scritta interamente in TypeScript e gira in un Web Worker nel browser.
Il codice è open source?
Al momento no, ma il gioco è gratuito e accessibile a tutti. Alcuni componenti tecnici (come il sistema di rating ELO e il protocollo PSN) potrebbero essere rilasciati come librerie open source in futuro.
Posso giocare contro un amico?
Sì, c'è una modalità "sfida amico" dedicata. Puoi inviare un invito a un amico e giocare una partita privata, senza passare dal matchmaking pubblico.
Quanto tempo hai impiegato a svilupparlo?
Il progetto è in sviluppo attivo da diversi mesi. Il game engine e il multiplayer hanno richiesto le prime settimane, l'IA ha richiesto un investimento significativo di tempo (è un mini-progetto a sé), e il sistema di rating, le classifiche e l'interfaccia mobile hanno richiesto numerose iterazioni.
Conclusione
Sviluppare la piattaforma multiplayer online di Skèmino è stata una delle sfide più stimolanti della mia carriera di sviluppatore. Un progetto che tocca architettura real-time, intelligenza artificiale, game design e UX mobile — tutto nello stesso codebase.
Se sei uno sviluppatore e hai un'idea per un gioco, il mio consiglio è: inizia dal game engine server-side e dai test. Tutto il resto (UI, animazioni, deploy) viene dopo. Le fondamenta sono tutto.
Se sei curioso di provare Skèmino, puoi giocare gratuitamente su skemino.chaincardgame.com. E se vuoi un sito web o una web application costruita con la stessa cura e attenzione ai dettagli, dai un'occhiata ai miei servizi, al mio processo di lavoro, o contattami — sarò felice di parlare del tuo progetto.
Vuoi sapere quanto costa realizzare un progetto web su misura? Leggi la guida completa ai prezzi dei siti web nel 2026.


