Bilan de fin de partie et écran d'analyse : courbe des chances, visualiseur, liste filtrable, rejouer d'ici

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 10:30:17 +01:00
co-authored by Claude Opus 5.5
parent a657d7d7a9
commit 006fd62704
22 changed files with 2420 additions and 106 deletions
+5 -5
View File
@@ -241,7 +241,10 @@ test("l'analyse de partie enregistrée : migration du format durable", () => {
const clean = { ...journal, review: migrated.review };
assert.equal(migrateJournal(clean), clean);
// Une autre version, ou une analyse mal formée, est oubliée.
const other = migrateJournal({ ...journal, review: { ...review, version: REVIEW_VERSION + 1 } });
const other = migrateJournal({
...journal,
review: { ...review, version: REVIEW_VERSION + 1 },
});
assert.equal(other.review, undefined);
const broken = { ...journal, review: { version: REVIEW_VERSION } } as unknown as GameJournal;
assert.equal(migrateJournal(broken).review, undefined);
@@ -300,10 +303,7 @@ test("une partie complète analysée par le moteur, comme une partie d'avant 1d"
assert.equal(summary.toReview?.advice.eventId, worst?.eventId);
// La chance de chaque tour d'un camp est comptée.
const moves = game.events.filter((e) => e.type === "MovePlayed");
assert.equal(
summary.player.luck.rolls + summary.computer.luck.rolls,
moves.length,
);
assert.equal(summary.player.luck.rolls + summary.computer.luck.rolls, moves.length);
// Les chances de gagner sont des probabilités, et la courbe finit sur
// le résultat.
const curve = chanceCurve(analysed);