Who is?
Il gioco dell'impostore in tasca
Who is? è la versione tascabile del classico gioco dell'impostore. Costruita in Kotlin + Jetpack Compose, Material 3, Room per la persistenza delle partite e DataStore per le preferenze. Layer di rete Ktor (server CIO + client WebSocket) per il multi-device.
Tre modalità di gioco. **Classico**: comportamento storico, gli impostori vedono "IMPOSTORE", i civili vedono la parola segreta. **Con Indizio**: come Classico, ma sotto "IMPOSTORE" l'impostore vede anche una parola "decoy" affine alla segreta — sa di essere impostore ma ha un appiglio per non dire assurdità. **Inganno**: gli impostori NON sanno di esserlo, ricevono direttamente la decoy come fosse la loro parola segreta — il bluff è totale, anche per chi sta mentendo. Se la parola sorteggiata non ha decoy l'app fa fallback automatico al Classico.
Due modalità d'uso. Single-device: un solo telefono passa a turno fra i giocatori. Multi-device LAN: un giocatore avvia il telefono come host (server Ktor + WebSocket sulla stessa Wi-Fi, registrazione mDNS, generazione QR), gli altri scansionano il QR per collegarsi come client. Ognuno vede la parola direttamente sul proprio dispositivo: niente piu` passaggio di smartphone, niente sbirciate. Discussione, voto e smascheramento sincronizzati in tempo reale via WebSocket.
Liste di parole personalizzabili. Tre liste predefinite (Standard, Difficili, Inglese — editabili ma non eliminabili) + tutte le liste custom che vuoi creare ("Frutta tropicale", "Componenti elettronici", "Libri di fantascienza"...). Ogni parola può avere una decoy associata per la modalità Inganno; alla creazione di una nuova lista è disponibile un pulsante "Auto-popola 20 parole" che attinge da un catalogo offline (Frutta, Animali, Sport, Colori, ecc.) matchando il titolo che hai dato alla lista. Templates: salvi una configurazione completa (concorrenti + modalità di gioco + lista parole + durata) e la rilanci in un tap.
History delle partite.
Funzionalità
- Tre modalità di gioco: Classico, Con Indizio, Inganno (impostore non sa di esserlo)
- Liste di parole personalizzabili: 3 liste predefinite (Standard, Difficili, Inglese) + tue custom
- Parola "decoy" per ogni voce, usata in modalità Con Indizio e Inganno
- Auto-popola 20 parole con catalogo offline matchato sul titolo della lista (Frutta, Animali, Sport, Colori...)
- Templates riutilizzabili: salvi concorrenti + modalità + lista + durata, rilanci in un tap
- Modalità single-device: un solo telefono passa a turno
- Modalità multi-device LAN: ogni giocatore vede la parola sul proprio telefono
- Server Ktor + WebSocket per la sincronizzazione partita
- mDNS discovery del server sulla rete locale
- QR code per il join istantaneo dei giocatori
- Anti-sbirciata: la parola non transita su altri dispositivi
- Numero giocatori variabile (minimo 3, impostori configurabili)
- History delle partite con data, durata, parola e impostori
- Material 3 con tema chiaro/scuro/sistema
Parametrizzazioni
- Modalità di gioco: Classico | Con Indizio | Inganno
- Lista parole attiva (predefinita o custom)
- Modalità connessione: single-device | multi-device LAN
- Porta server WebSocket (default 8767)
- Numero giocatori e numero impostori
- Durata partita (override per template, opzionale)
- Tema: sistema | chiaro | scuro
Pre-requisiti tecnici
- Android 8.0+ (API 26)
- ~30 MB di spazio
- Per modalità multi-device: 2+ dispositivi sulla stessa Wi-Fi
- Per modalità multi-device: permessi Wi-Fi state, Camera (per QR client)
- In single-device: nessun permesso particolare richiesto