La catena del ghiacciolo: la Tosca e le bibite, ghiacciolo nella cedrata, stecco e gomma, la chiavetta nella griglia del ponticino, la torcia nella casetta

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017egeN2amL84ErjfgQFtEDn
This commit is contained in:
2026-10-24 00:49:37 +02:00
co-authored by Claude Opus 5.5
parent 64a57d6524
commit 066f9ff9ed
63 changed files with 331 additions and 26 deletions
+30
View File
@@ -231,3 +231,33 @@ test('le strade vanno e tornano: niente sensi unici, e ogni posto si raggiunge d
while (queue.length) for (const b of exits[queue.shift()] ?? []) if (!seen.has(b)) { seen.add(b); queue.push(b); }
for (const id of Object.keys(story.scenes)) assert.ok(seen.has(id), `${id} non si raggiunge`);
});
test('la catena del ghiacciolo: Tosca, cedrata, stecco, gomma, griglia, chiavetta, casetta, torcia', () => {
const g = new Game(story);
const say = () => settle(g);
const answer = text => { const i = g.options().findIndex(o => o.text === text); assert.ok(i >= 0, `manca «${text}»`); g.choose(i); say(); };
g.go('tennis_chiesa'); say();
g.act('talk', 'chiosco'); say();
answer('Un ghiacciolo al limone.');
answer('Una cedrata, da portare via.');
answer('Niente, grazie Tosca.');
assert.deepEqual(g.state.inventory, ['ghiacciolo', 'cedrata']);
g.act('use', 'cedrata', 'ghiacciolo'); say();
assert.deepEqual(g.state.inventory, ['stecco'], 'inzuppato e mangiato: resta lo stecco');
g.act('talk', 'chiosco'); say();
assert.ok(!g.options().some(o => o.text.startsWith('Un ghiacciolo')), 'il ghiacciolo era l\'ultimo');
answer('Niente, grazie Tosca.');
g.go('ponticino'); say();
g.act('use', 'griglia', 'stecco'); say();
assert.ok(!g.state.inventory.includes('chiavetta'), 'senza gomma non si attacca');
g.go('oratorio'); say();
g.act('take', 'gomma_terra'); say();
g.act('use', 'gomma', 'stecco'); say();
assert.deepEqual(g.state.inventory, ['stecco_gomma']);
g.go('ponticino'); say();
g.act('use', 'griglia', 'stecco_gomma'); say();
assert.ok(g.state.inventory.includes('chiavetta'));
g.go('area_feste'); say();
g.act('open', 'casetta'); say();
assert.ok(g.state.flags.casetta_aperta && g.state.inventory.includes('torcia') && !g.state.inventory.includes('chiavetta'));
});