# 🎰 ELSA GAMBLING

Web app (HTML + CSS + JS vanilla) che assegna le persone alle stanze con un
**algoritmo di matching** e rivela il risultato come uno **show di scommesse /
slot machine**: rulli che rallentano, near-miss, drumroll, coriandoli, jackpot
sulle stanze con jacuzzi.

## Come avviare

Basta aprire **`index.html`** in un browser (doppio click). **Funziona 100%
offline**: librerie (three.js, canvas-confetti) e font sono in `vendor/`, nessuna
dipendenza da internet — perfetto per un proiettore senza wifi.

In alternativa, con un mini server locale:

```bash
python3 -m http.server 8080
# poi apri http://localhost:8080
```

## Come si gioca

- **START / SPINNA!** — rivela la persona successiva con un giro di slot.
- **AUTO ▶** — rivela tutti in sequenza da solo (modalità proiettore).
- **RE-ROLL 🎲** — rifà il sorteggio (nuova assegnazione).
- **🔊** — on/off dei suoni: **campioni reali stile slot** (whirr dei rulli nel
  roll, jingle di vincita, sirena di jackpot, monete — in `sounds/`, royalty-free
  [Mixkit](https://mixkit.co/free-sound-effects/slot-machine/)) con **fallback
  sintetizzato** se i file non caricano (es. offline totale).
- **Scommesse** — prima di ogni giro clicca una stanza nel pannello a destra per
  puntare 10 gettoni; se indovini vinci in base alla quota. Contro di te giocano
  3 scommettitori simulati (leaderboard live).

I posti con **jacuzzi** (Argo, Eolo, "Quanto te la rischi") sono i jackpot e
vengono rivelati per ultimi, con celebrazione extra.

**Nessun match (~30%):** ogni tanto i 3 rulli si fermano su stanze diverse →
effetto pazzo (sirena + strobo + glitch + timbro "NO MATCH"), le puntate del giro
vengono annullate e la persona **ri-tira** (senza avanzare). Max 2 no-match di fila.

## Regole del matching

- Ogni stanza è **mono-genere** (M con M, F con F).
- L'algoritmo partiziona le stanze tra i due generi rispettando le capienze, poi
  distribuisce le persone a caso senza lasciare stanze vuote.
- Verificato su 5000 run: 0 violazioni del vincolo, nessuna stanza vuota.

## File

| File | Ruolo |
|------|-------|
| `index.html` | Struttura + link CDN/font |
| `styles.css` | Tema neon/casino |
| `data.js` | Stanze e partecipanti (sorgente dati) |
| `matching.js` | Algoritmo di assegnazione (testabile in Node) |
| `app.js` | Motore reveal: rulli, audio, three.js, coriandoli, scommesse |
| `sounds/` | SFX reali stile slot (Mixkit, royalty-free): reel-spin, win, jackpot, coins |
| `vendor/` | Librerie e font in locale (three.js, canvas-confetti, woff2) — app offline |
| `docs/` | Ricerca su stile gambling, suspense, interattività, implementazione |

## Dati attuali

16 persone (6 F / 10 M) · 8 stanze / 18 posti. Modifica `data.js` per cambiare
nomi, generi o stanze — l'app si adatta da sola.

## Idee non ancora fatte (possibili evoluzioni)

- **Scommesse multi-persona reali** dai telefoni (ora: singolo operatore + bot
  simulati). Servirebbe `BroadcastChannel` o un piccolo backend.
- **Gran finale** dedicato all'ultimo jackpot (ora tutti i jackpot sono uguali).
