Files
leggenda-del-regolo/docs/BRISCOLA.md
T
manzoloandClaude Opus 5.5 7e1e6f6144 Giochi di carte dopo la revisione di Codex sui tre insieme; player dei video «Come si gioca» e primo copione
Esito che vale e si salva appena deciso, per tutti i minigiochi (anche tornando al titolo dalla schermata del risultato); briscola: uscire durante il conteggio non perde più la vittoria; tressette: si esce ai 21 col primo evento che ci porta, accusa compresa (prima vinceva sempre Andrea se ci arrivavano tutte e due), il carico che fa vincere si dà anche se è il 2, accuse che non escono dal tavolo, convenzioni scritte nell'aiuto; scopa: primiera valutata per quel che migliora, finale esatto a mazzo finito, presa sulla tavola al rilascio con scelta e conferma, frecce e Invio sempre sulla presa scelta. Tastiera: Invio e Spazio giocano sempre la carta scelta. Tavola descritta a parole. Classi CSS comuni ai tre giochi.
Video: player nel gioco (pulsante «Guarda il video» nel «Come si gioca», compare quando il video esiste), video/narra.py per la voce del narratore, pezzi comuni dei copioni e il copione della briscola; scaletta in video/SCALETTA-CARTE.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
2026-10-26 16:39:22 +01:00

7.6 KiB
Raw Blame History

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.

Revisione di Codex (26 ottobre, i tre giochi insieme)

Regole promosse. Corretti: uscendo durante il conteggio si perdeva una vittoria già fatta (ora il risultato è deciso all'ultima presa e il conteggio lo mostra soltanto) e, per tutti e tre i giochi, l'esito che non finiva nel salvataggio se dal risultato si tornava al titolo; Spazio sui pulsanti come negli altri giochi; la briscola e la carta in tavola dette anche a parole; l'aiuto coi nomi di tutti e due i mazzi; «Rivincita a briscola?». Proposta non fatta: i seguiti campionati di «A fassi male» col finale esatto, e l'obiettivo vittoria invece dei punti.

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/:

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.