Tressette ai 21 all'oratorio: in quattro a coppie, Andrea e il socio contro il giocatore di carte e l'altro. Obbligo di seme, punti in terzi e ultima presa, accuse (napoletana, tre o quattro Assi, 2 o 3), segni onesti di chi esce (busso, striscio, volo) coi loro suoni, si va ai 21 smazzata dopo smazzata. Avversari «Alla bona», «Seria» (gioca a regola ma non conta) e «A fassi male» (conta, legge semi finiti, accuse e busso del socio). Tavolo a quattro, pulsanti dei segni e della mano, tastiera B/S/V; test, taratura e prova nel browser
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,24 @@
|
||||
// node tools/calibrate_tressette.mjs [partite per livello, predefinite 300]
|
||||
// Stesse carte per i tre livelli; Andrea gioca come il suo socio («A fassi male»), gli avversari al livello scelto.
|
||||
import { newTressette, observation, choose, play, update, canPlay, LEVELS } from '../src/engine/tressette.js';
|
||||
|
||||
export function simulate(seed, level, me = 'male') {
|
||||
const c = newTressette(seed, { level });
|
||||
for (let steps = 0; steps < 5000 && c.step !== 'result'; steps++) {
|
||||
if (canPlay(c)) { const m = choose(observation(c, 0), me, steps + 1); if (!play(c, m.index, 0, m.signal)) throw new Error('mossa rifiutata: ' + c.refused); }
|
||||
update(c, 20); c.events.length = 0;
|
||||
}
|
||||
if (c.step !== 'result') throw new Error('Partita non conclusa');
|
||||
return c;
|
||||
}
|
||||
export function calibrate(n = 300, me = 'male') {
|
||||
return LEVELS.map(level => {
|
||||
let wins = 0, rounds = 0;
|
||||
for (let i = 1; i <= n; i++) {
|
||||
const c = simulate(Math.imul(i, 2654435761) >>> 0, level, me);
|
||||
wins += c.result.winner === 'player'; rounds += c.round;
|
||||
}
|
||||
return { level, games: n, playerPercent: 100 * wins / n, rounds: rounds / n };
|
||||
});
|
||||
}
|
||||
if (process.argv[1] === new URL(import.meta.url).pathname) console.log(JSON.stringify(calibrate(Number(process.argv[2]) || 300), null, 2));
|
||||
Reference in New Issue
Block a user