Carte che volano: dalla mano al tavolo e, finita la presa, sul mucchietto di chi ha preso (briscola, tressette, scopa; Andrea: «non si capisce quando vengono buttate le carte»). Il valzer della balera ai tavoli da carte (tools/valzer_carte.py: fisarmonica musette, basso, melodia di mandolino col tremolo), musica per primo piano; video «Come si gioca»: cache del Chromium della VM spenta, narratore e personaggi a turno, musica di sottofondo, pronunce del narratore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
This commit is contained in:
2026-10-26 18:17:23 +01:00
co-authored by Claude Opus 5.5
parent 7e1e6f6144
commit 538bf6cedb
19 changed files with 263 additions and 43 deletions
+2
View File
@@ -89,6 +89,8 @@ try {
game.closeup = { id: 'briscola', ...newBriscola(91421, { level: 'male', deck }) };
}, deck);
await page.waitForSelector('#briscola-controls:not([hidden])');
// Il tavolo ha la sua musica (il valzer delle carte), non quella dell'oratorio.
await page.waitForFunction(() => music.want === 'assets/audio/carte.mp3');
assert.ok(await page.isHidden('#bocce-controls'));
const scene = await page.locator('#scene').boundingBox(), exit = await page.locator('#closeup-close').boundingBox();
assert.ok(exit.y >= scene.y + scene.height, 'uscita fuori dal tavolo');
+1 -1
View File
@@ -39,7 +39,7 @@ test('nessun obbligo di seme; la presa resta sul tavolo, chi prende pesca prima
assert.ok(play(c, 0, 'cpu')); assert.ok(play(c, 1));
assert.equal(c.step, 'trick'); assert.equal(c.last.winner, 'player'); assert.equal(c.table.length, 2);
update(c, 1); assert.equal(c.table.length, 2); assert.equal(c.stock.length, stock.length);
update(c, 0.26);
update(c, 0.41); // TRICK_TIME: 1,4 s, la presa vola sulle prese
assert.equal(c.hands.player.at(-1).id, stock[0].id);
assert.equal(c.hands.cpu.at(-1).id, stock[1].id);
assert.equal(c.current, 'player'); assert.equal(c.table.length, 0);
+4
View File
@@ -13,6 +13,10 @@ test('il brano giusto per titolo, fine e scena', () => {
assert.equal(trackFor(s, { screen: 'game', scene: 'a' }), 'g.mp3');
assert.equal(trackFor(s, { screen: 'game', scene: 'b' }), 'b.mp3');
assert.equal(trackFor({ scenes: {} }, { screen: 'game', scene: 'x' }), null);
// Un tavolo da carte aperto ha la sua musica; un primo piano senza musica lascia quella della scena.
const tavoli = { ...s, closeups: { carte: { music: 'c.mp3' }, libro: {} } };
assert.equal(trackFor(tavoli, { screen: 'game', scene: 'b', closeup: 'carte' }), 'c.mp3');
assert.equal(trackFor(tavoli, { screen: 'game', scene: 'b', closeup: 'libro' }), 'b.mp3');
// La sera ha la sua musica all'aperto; la scena col suo brano e gli interni non cambiano.
const sera = { id: 'sera', music: 's.mp3' };
assert.equal(trackFor({ ...s, scenes: { ...s.scenes, i: { indoor: true } } }, { screen: 'game', scene: 'a', phase: sera }), 's.mp3');