Briscola all'oratorio: alle tavolate il giocatore di carte (segnaposto, sprite di Codex) sfida Andrea a briscola in due. Si sceglie il mazzo, toscane (cuori, mattoni, fiori, picche; gobbo, donna e regio) o napoletane, e il livello: «Alla bona», «Seria», «A fassi male» (conta le carte uscite, finale perfetto a mazzo finito, mai la mano altrui). Regole fedeli, conteggio delle prese a fine partita, rivincita, suoni di carte, comandi con mouse, tocco e tastiera. Carte e dorso col Regolo serpentello disegnati da Codex; motore e prove nel browser rivisti da Claude
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
# Briscola all’oratorio
|
||||
|
||||
Implementazione del 26 ottobre 2026. ES modules statici, nessun build step.
|
||||
|
||||
## Partita e comandi
|
||||
|
||||
Il giocatore di carte è un personaggio inventato e provvisorio, seduto a destra alle tavolate
|
||||
dell’oratorio: **[DA ANDREA: chi è]**. Il dialogo offre «Alla bona», «Seria», «A fassi male»;
|
||||
dopo una partita conclusa offre la rivincita. `briscola_vinta` ricorda una vittoria e
|
||||
`briscola_giocata` abilita la rivincita anche dopo sconfitta o patta. Nessuno dei due flag
|
||||
serve alla soluzione dell’avventura.
|
||||
|
||||
Un clic o tocco su una carta la gioca al rilascio sullo stesso bersaglio. Nessuna carica.
|
||||
Le frecce e 1–2–3 scelgono, Invio gioca, Esc esce. I tre pulsanti con nome e seme
|
||||
offrono bersagli aggiuntivi e accesso tramite Tab. I comandi di tiro degli altri minigiochi
|
||||
rimangono separati; in `MINIGAMES` pressione, rilascio, annullamento e mira sono opzionali.
|
||||
|
||||
Mazzo da 40 carte, 120 punti, distribuzione alternata e mazziere deterministico dal seed.
|
||||
La briscola è in fondo al mazzo e compresa nel contatore. Chi prende pesca prima e riapre;
|
||||
non esiste obbligo di seme. La presa resta visibile 1,25 secondi. Solo dopo la ventesima
|
||||
presa si contano tutte le carte, una ogni 0,35 secondi, mostrando carta ingrandita,
|
||||
incremento e totale. A 60–60 il risultato è patta. Il risultato resta fino all’uscita.
|
||||
|
||||
## Avversari e taratura
|
||||
|
||||
`observation` espone soltanto la propria mano, le carte pubbliche, i conteggi e l’eventuale
|
||||
briscola pescata dall’altro. Non passa la mano avversaria, l’ordine del mazzo o il seed della
|
||||
distribuzione. «Alla bona» sceglie casualmente; «Seria» scarta lisci, conserva briscole e
|
||||
prende carichi con quelle piccole. «A fassi male» ricostruisce le carte non viste, confronta
|
||||
le mosse su 40 distribuzioni possibili e simula seguiti giocati con buon senso. Sono ipotesi,
|
||||
non la distribuzione effettiva. A mazzo finito il complemento delle carte pubbliche e della
|
||||
propria mano identifica l’altra mano: da quel momento usa minimax esatto fino alla fine.
|
||||
|
||||
Comando riproducibile: `node tools/calibrate_briscola.mjs 1000`.
|
||||
Semi `Math.imul(i, 2654435761) >>> 0`, i da 1 a 1000, stessi mazzi per ogni livello.
|
||||
Andrea usa sempre `attentive`, l’euristica di riferimento; dà le carte 496 volte su 1000.
|
||||
|
||||
| Livello | Vittorie Andrea | Vittorie avversario | Patte | Punti medi Andrea |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| Alla bona | 847 (84,7%) | 144 (14,4%) | 9 (0,9%) | 79,159 |
|
||||
| Seria | 481 (48,1%) | 494 (49,4%) | 25 (2,5%) | 59,952 |
|
||||
| A fassi male | 359 (35,9%) | 621 (62,1%) | 20 (2,0%) | 55,628 |
|
||||
|
||||
Queste percentuali misurano il confronto con quell’automatismo, non con giocatori umani.
|
||||
|
||||
## Grafica e audio
|
||||
|
||||
Due mazzi, scelti nel dialogo («Con le toscane» / «Con le napoletane»): stesse regole e stessi id, cambiano
|
||||
nomi e disegni (`DECKS` e `DECK_CARDS` in `briscola.js`; la scelta è il flag `carte_napoletane`).
|
||||
|
||||
- **Toscane** (predefinite): semi francesi cuori, mattoni, fiori, picche; figure gobbo, donna e regio (il regio
|
||||
sempre con la corona). Numerali senza numeri, semi disposti come nel mazzo vero e capovolti nella metà bassa;
|
||||
figure intere col seme e la lettera (G, D, R) in alto a sinistra. Riferimento: `assets/raw/carte/toscane-riferimento.png`.
|
||||
- **Napoletane**: monete, coppe, lame ricurve incrociate, bastoni nodosi; fante, cavallo e re. Valore nell’angolo
|
||||
e seme scritto per non affidarsi solo al colore.
|
||||
|
||||
Tutto disegnato via canvas, in pixel art originale.
|
||||
I bersagli della mano sono 84×120 pixel a 640×360. Dorso con serpentello coronato e cornice
|
||||
simmetrica; tavolino di legno e panno, mano avversaria coperta, mazzo e mucchietti delle prese.
|
||||
|
||||
Sprite generato con lo **strumento immagini integrato**, poi preparato con
|
||||
`slice_sprites.py --alpha --fixed-grid --cols 2 --rows 2` e `prepare_character.py`.
|
||||
Pose: `sit`, `talk`, `laugh`, `shuffle`. Foglio originale in
|
||||
`assets/raw/giocatore-carte-sheet.png`; prompt completo in
|
||||
`prompts/personaggi/giocatore-carte-sheet.txt` (entrambi esclusi da git).
|
||||
|
||||
Effetti Web Audio `card-slide`, `card-tap`, `card-shuffle`, collegati allo stesso volume,
|
||||
muto e pausa degli altri effetti. Il colpo accompagna l’arrivo della carta dopo lo scorrimento.
|
||||
13 nuove battute XTTS (4 Andrea, 9 giocatore), con indice e durate aggiornati.
|
||||
Per generarle senza GPU/rete, `tools/voci_xtts.py` accetta `XTTS_DEVICE=cpu` e
|
||||
`XTTS_MODEL_DIR` con la cartella del modello già scaricato; le impostazioni predefinite
|
||||
rimangono quelle del progetto. Non è stata verificata all’ascolto la pronuncia delle nuove voci.
|
||||
|
||||
## Verifica e limiti della sessione
|
||||
|
||||
**`npm test`: passato.** Regole, determinismo, conservazione delle 40 carte e dei 120 punti,
|
||||
pescata, ultima briscola, fine mazzo, patta, livelli, accesso negato ai dati nascosti,
|
||||
minimax confrontato con un oracolo esaustivo, renderer puro, input geometrico,
|
||||
dialoghi/flag/rivincita e audio. Passano anche i test precedenti e la soluzione completa.
|
||||
|
||||
`npm run browser` e `npm run browser:briscola` sono stati lanciati ma **bloccati dall’ambiente**:
|
||||
`PermissionError: [Errno 1] Operation not permitted` alla creazione del socket del server.
|
||||
Anche l’avvio isolato di Chromium fallisce con `sandbox_host_linux.cc:41`,
|
||||
`shutdown: Operation not permitted`. Non è stato possibile verificare l’interfaccia reale
|
||||
con Playwright né produrre schermate desktop/telefono.
|
||||
|
||||
Il test `tests/briscola.browser.mjs` è pronto: partite complete con mouse, touch e tastiera
|
||||
su desktop e telefono verticale, più touch orizzontale; pausa, muto, gesto annullato,
|
||||
conteggio, risultato e rivincita. Accelera solo le attese tramite `game.update`, senza
|
||||
giocare carte di Andrea direttamente nel motore. Salva in `/tmp/regolo-shots/briscola-*.png`.
|
||||
Le misure Web Audio dei tre nuovi suoni sono comprese nel collaudo browser multimedia.
|
||||
|
||||
Anteprime **offline, non schermate browser**, prodotte e ispezionate nella sessione:
|
||||
|
||||
- `/tmp/regolo-shots/briscola-offline-carte.png`
|
||||
- `/tmp/regolo-shots/briscola-offline-tavolo.png`
|
||||
- `/tmp/regolo-shots/briscola-offline-risultato.png`
|
||||
|
||||
## File
|
||||
|
||||
Nuovi: `src/engine/briscola.js`, `src/engine/briscola-render.js`,
|
||||
`assets/characters/giocatore-carte.png`, `assets/characters/giocatore-carte.json`,
|
||||
`tests/briscola.test.mjs`, `tests/briscola-render.test.mjs`, `tests/briscola.browser.mjs`,
|
||||
`tools/calibrate_briscola.mjs`, questo documento e 13 MP3 elencati qui sotto.
|
||||
|
||||
Modificati: `src/engine/game.js`, `src/engine/render.js`, `src/engine/soundscape.js`,
|
||||
`src/main.js`, `src/story/story.js`, `index.html`, `style.css`, `package.json`,
|
||||
`tests/story.test.mjs`, `tests/multimedia.test.mjs`, `tests/multimedia.browser.mjs`,
|
||||
`tools/voci.json`, `tools/voci_xtts.py`, `assets/voices/index.json`.
|
||||
|
||||
Nuovi file in `assets/voices/`:
|
||||
|
||||
```text
|
||||
andrea-6e63dafda1.mp3
|
||||
andrea-71f3bff8a0.mp3
|
||||
andrea-b851b9ed26.mp3
|
||||
andrea-d2f285f610.mp3
|
||||
giocatore_carte-12f97003ec.mp3
|
||||
giocatore_carte-13af2e2331.mp3
|
||||
giocatore_carte-43e76cf11b.mp3
|
||||
giocatore_carte-6ce98bce81.mp3
|
||||
giocatore_carte-729b3344da.mp3
|
||||
giocatore_carte-8dfadb4acc.mp3
|
||||
giocatore_carte-9c07caaab4.mp3
|
||||
giocatore_carte-a8846bfa7b.mp3
|
||||
giocatore_carte-f1f219bd1c.mp3
|
||||
```
|
||||
|
||||
`docs/STATO.md` invariato. Nessun commit, tag o push.
|
||||
@@ -18,6 +18,13 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto,
|
||||
|
||||
## Dove siamo arrivati
|
||||
|
||||
- **Briscola all'oratorio (26 ottobre)**: alle tavolate siede «Il giocatore di carte» (segnaposto, [DA ANDREA: chi è],
|
||||
sprite e battute provvisorie di Codex). Parlandoci si sceglie il mazzo (toscane o napoletane) e il livello
|
||||
(«Alla bona», «Seria», «A fassi male»), poi briscola a due fedele alle regole, conteggio delle prese a fine
|
||||
partita e rivincita. Facoltativa: nessun flag serve alla soluzione. Motore `src/engine/briscola.js` (Claude),
|
||||
disegno `briscola-render.js` (Codex), dettagli e taratura in `docs/BRISCOLA.md`. Prova: `npm run browser:briscola`.
|
||||
Prossimo: il **tressette a coppie «ai 21»** con busso, striscio e volo (da chiedere ad Andrea: le accuse?).
|
||||
|
||||
- **Multimedia (25 ottobre, modifiche locali)**: il libro sfogliabile già presente conserva immagini, battute e
|
||||
riapertura dall'inventario; il fruscio ora segue il volume degli effetti, non quello delle voci.
|
||||
Nuovi paesaggi sonori sintetizzati con Web Audio (`src/engine/soundscape.js`, profili in
|
||||
|
||||
Reference in New Issue
Block a user