Bocce più vere (lavoro di Codex): mira libera sul campo o nel dettaglio del pallino, forza regolabile senza tempismo, urti fra masse diverse, tira chi non ha il punto, distanze in centimetri, suoni di rotolamento e urto, comandi anche a pulsanti e tastiera; test aggiornati alle nuove regole

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
This commit is contained in:
2026-10-25 19:26:23 +01:00
co-authored by Claude Opus 5.5
parent a0201fea18
commit 44485cff52
10 changed files with 386 additions and 154 deletions
+8 -5
View File
@@ -14,10 +14,11 @@ function throwTo(c, u) {
assert.ok(release(c));
}
test('la forza sale e scende: a metà giro è piena, a giro finito torna a zero', () => {
test('la forza sale finché si tiene premuto, fino al massimo: niente tempismo da azzeccare', () => {
assert.equal(powerAt(0), 0);
assert.ok(Math.abs(powerAt(SWING / 2) - 1) < 1e-9);
assert.ok(powerAt(SWING) < 1e-9);
assert.ok(Math.abs(powerAt(SWING / 2) - 0.5) < 1e-9);
assert.equal(powerAt(SWING), 1);
assert.equal(powerAt(SWING * 3), 1, 'oltre il massimo resta piena, non ricomincia');
});
test('una boccia va lontano quanto dice la forza, verso il pallino', () => {
@@ -64,6 +65,7 @@ test('una mano intera: tre bocce a testa, a turno, poi il risultato', () => {
assert.equal(c.balls.length, BALLS * 2);
assert.ok(['player', 'cpu'].includes(c.result.winner));
assert.equal(press(c), false, 'a mano finita non si tira più');
assert.ok(['player', 'cpu'].includes(c.result.winner) || c.result.winner === null);
});
test('la prospettiva: lontano è più in alto e più piccolo, al centro della pista', () => {
@@ -95,8 +97,9 @@ test('al pallaio: Mariano sfida, la mano si gioca nel primo piano; vincere vale
}
assert.equal(c.step, 'result');
c.result = { winner: 'player', points: 1 };
for (let i = 0; i < 20 && g.closeup; i++) g.update(0.25);
assert.equal(g.closeup, null, 'il risultato si chiude da solo');
for (let i = 0; i < 20; i++) g.update(0.25);
assert.equal(g.closeup, c, 'il risultato resta a schermo finché non si torna al pallaio');
assert.ok(g.closeupClose());
const after = settle(g).map(s => `${s.who}: ${s.text}`);
assert.ok(after.includes('mariano: Hai vinto, ti ci porto!'));
assert.ok(g.state.flags.bocce_vinte);