JoeQuiz
Quiz multiplayer da salotto: i telefoni come pulsantiera, una TV come schermo comune, quattordici minigiochi. Si comporta come se fosse in tempo reale su un hosting condiviso qualsiasi.
Il problema
L'idea era una serata alla Buzz! su PlayStation, non una gara di riflessi: dieci persone nella stessa stanza, ognuna col proprio telefono. Il vincolo era l'hosting: niente WebSocket, niente processi sempre accesi, un normale server condiviso accanto ad altri siti.
Le piattaforme esistenti o chiedono un'infrastruttura dedicata o riducono tutto a chi preme per primo. JoeQuiz doveva essere giusto sui tempi anche con le oscillazioni di un WiFi di casa.
Come funziona
Struttura
Tre schermate, una per ruolo: regia per chi conduce, gioco per chi ha il telefono, schermo per la TV. Ognuna riceve una vista dello stato costruita apposta, e quella dei giocatori la risposta giusta non la contiene proprio. Un solo motore di round, quattordici configurazioni.
Flusso d'uso
Si apre una stanza dal computer, gli altri entrano dal telefono con un codice di sei lettere, senza app né registrazione. Un giocatore sceglie argomento e difficoltà, il sistema estrae il minigioco. I round decidono il tempo di partenza del finale, che si gioca a oltranza.
Scelte tecniche
Polling HTTP ogni mezzo secondo con lo stato su MySQL, una sincronizzazione degli orologi in stile NTP per stabilire chi ha premuto davvero per primo, domande consegnate coperte e rivelate a tutti nello stesso istante. Il gioco avanza grazie alle richieste dei giocatori; un cron copre il caso in cui non chiede più nessuno.
Limiti noti
I punteggi stanno in configurazione e vanno ritarati sulle serate vere: il valore più delicato è la soglia di tempo del finale. La banca domande copre cinque argomenti; musica, serie TV, sport e videogiochi sono ancora in bozza.
Numeri
| Domande in banca, oltre | 6.400 |
|---|---|
| Minigiochi, più il round finale | 14 |
| Verifiche automatiche, oltre | 850 |
| Tabelle dello schema | 35 |
| Righe di codice applicativo, circa | 30.000 |
Stack
- PHP 8
- MariaDB
- JoeCMS
- JavaScript
- Polling HTTP
- Python