diff --git a/app/tests/steps/revoir-ma-partie.steps.ts b/app/tests/steps/revoir-ma-partie.steps.ts index d1a91a8..be9ca8a 100644 --- a/app/tests/steps/revoir-ma-partie.steps.ts +++ b/app/tests/steps/revoir-ma-partie.steps.ts @@ -108,10 +108,17 @@ When(/^vous choisissez (?:cette fois )?le coup (.+)$/, async (move: string) => { await playMove(move); }); -When("l'ordinateur sort ses deux pions avec {int}-{int}", async (a: number, b: number) => { - dice.push(a, b); +/** L'ordinateur, sûr de sortir ses deux pions au jet suivant, double ; le + * joueur passe. */ +async function computerDoublesAndPlayerPasses(): Promise { await game.playComputerTurn(); - assert.equal(game.state.phase, "over", "l'ordinateur a doublé au lieu de jouer"); + assert.equal(game.state.phase, "doubled", "l'ordinateur ne double pas"); + await game.drop(); + assert.equal(game.state.phase, "over"); +} + +When("l'ordinateur, sûr de gagner, double et que vous passez", async () => { + await computerDoublesAndPlayerPasses(); analysed = await analyse(game.journal); }); @@ -190,7 +197,7 @@ Then("la partie a deux branches, dont la partie d'origine, intacte", () => { }); Given("une partie finie enregistrée sans aucune analyse", async () => { - dice = [6, 1, 2, 1]; + dice = [6, 1]; game = Game.start(engine, { setup: { position: BEAROFF, firstTurn: "player" }, level: "2ply", @@ -198,8 +205,7 @@ Given("une partie finie enregistrée sans aucune analyse", async () => { }); await game.roll(); await playMove("6/5 5/off"); - await game.playComputerTurn(); - assert.equal(game.state.phase, "over"); + await computerDoublesAndPlayerPasses(); const { library } = await openGameLibrary({ localStorage: memoryStorage() }); await library.save("ancienne", game.journal, { level: "2ply" }); const saved = await library.load("ancienne"); diff --git a/docs/etape-1.md b/docs/etape-1.md index f506d6b..0caed13 100644 --- a/docs/etape-1.md +++ b/docs/etape-1.md @@ -21,7 +21,7 @@ Repris du cadrage (modules, écrans clés, IA générative en V1) et des ADR 001 | 1b. Parties enregistrées (fait) | Stockage IndexedDB derrière l'interface de stockage existante : plusieurs parties, reprise automatique, branches (« Rejouer d'ici » crée une branche, l'originale reste intacte et rechargeable), export SGF avec variantes | — | | 1c. Match et réglages (fait) | Partie libre ou match en N points, règle Crawford, règle Jacoby, choix du niveau de l'ordinateur, conseil du maître activable ou non ; écran de nouvelle partie | 1a, 1b | | 1d. Conseil du maître (fait) | Après chaque coup du joueur, jamais avant (ADR 0011) : appréciation du moteur (bon coup, imprécision, erreur, grosse erreur) avec mot, icône et couleur, phrase du maître fondée sur les chiffres du moteur, coup recommandé montré sur demande ; aussi pour les décisions de videau ; calcul en arrière-plan sans retarder le jeu | 1a | -| 1e. Fin de partie et analyse | Bilan (ADR 0011) : résultat, coups par appréciation, taux d'erreur comparé à la chance, « le coup à revoir » ; écran d'analyse : graphe d'équité (toucher un point ouvre la position), liste des erreurs filtrable, visualiseur pas à pas coup joué contre meilleur coup, « Rejouer d'ici » | 1a, 1b, 1d | +| 1e. Fin de partie et analyse (fait) | Bilan (ADR 0011) : résultat, coups par appréciation, taux d'erreur comparé à la chance, « le coup à revoir » ; écran d'analyse : graphe d'équité (toucher un point ouvre la position), liste des erreurs filtrable, visualiseur pas à pas coup joué contre meilleur coup, « Rejouer d'ici » | 1a, 1b, 1d | | 1f. Prompts à copier | Gabarits versionnés et testés (`docs/prompts/` ou équivalent, source unique), bouton « Demander à une IA » sur le plateau, le conseil du maître, l'analyse et la fin de partie ; le moteur décide, l'IA explique | 1d, 1e | | 1g. Accueil, tutoriel et leçons | Accueil (reprendre, nouvelle partie, prochaine leçon, progression résumée), tutoriel des règles interactif et illustré (0e.5), cinq premières leçons numérotées (ADR 0011) avec positions et « à vous de jouer », progression locale ; contenus CC BY-SA 4.0 en brouillon, à relire par un joueur fort | 0e.5, 1a | | 1h. Progression | Historique des parties et courbe du taux d'erreur | 1b, 1e | diff --git a/docs/plans/2026-11-03-bilan-et-analyse.md b/docs/plans/2026-11-03-bilan-et-analyse.md deleted file mode 100644 index 5a221c5..0000000 --- a/docs/plans/2026-11-03-bilan-et-analyse.md +++ /dev/null @@ -1,46 +0,0 @@ -# Fin de partie et analyse (1e) - -- **Date** : 2026-11-03 -- **Étape** : 1e (`docs/etape-1.md`) -- **Statut** : prévu (après 1d) -- **Exécutant** : sous-agent general-purpose, dans un worktree - -## Objectif - -Que le joueur comprenne sa partie : le bilan de fin de partie (ADR 0011), puis un écran d'analyse avec graphe d'équité, liste des erreurs, visualiseur et « Rejouer d'ici ». - -## Consignes - -Respecter les ADR 0007, 0008, 0011 et 0013. Chaque écran a son adresse : `#/parties//bilan` et `#/parties//analyse/`, à ajouter au tableau de l'ADR 0013 par un amendement. Pour la charte, suivre les maquettes « Fin de partie » du canevas. Aucune nouvelle dépendance : le graphe est dessiné en SVG à la main. - -1. **Analyse de la partie.** Elle réutilise les analyses rangées par 1d (coups et videau) et complète celles qui manquent en arrière-plan, de façon progressive et annulable. Elle donne : - - le taux d'erreur à la manière de gnubg ; - - la chance aux dés (`luck`) pour chaque camp ; - - le décompte des coups par appréciation. -2. **Bilan**, dans le panneau de fin de partie existant : - - le résultat ; - - les coups par appréciation ; - - le taux d'erreur comparé à la chance, en phrases simples ; - - « le coup à revoir » : la plus grosse erreur, avec sa position, le coup joué et le meilleur coup ; - - un emplacement pour le bouton « Demander à une IA » (1f) ; - - « Voir l'analyse ». -3. **Écran d'analyse** : - - un graphe d'équité où toucher un point ouvre la position ; - - la liste des erreurs, filtrable par appréciation ; - - un visualiseur pas à pas qui montre sur le plateau le coup joué contre le meilleur coup, avec des pions animés ; - - « Rejouer d'ici », qui crée une branche (domaine de 1b) sans toucher l'original. -4. **Tests** : - - scénarios Gherkin : bilan, coup à revoir, rejouer d'ici, chacun avec des dés imposés ; - - fiches du glossaire : taux d'erreur, graphe d'équité si absentes ; - - `make lint`, `make test`, `make test-browser`, avec des captures pour la recette design. - -## Critères de réussite - -- Après une partie, le bilan nomme le coup à revoir, conforme à l'analyse du moteur. -- L'analyse s'ouvre par son adresse. -- « Rejouer d'ici » crée une branche. -- Les trois commandes passent. - -## Résultat - -À remplir à la clôture. diff --git a/docs/scenarios/revoir-ma-partie.feature b/docs/scenarios/revoir-ma-partie.feature index 1649a18..774fba1 100644 --- a/docs/scenarios/revoir-ma-partie.feature +++ b/docs/scenarios/revoir-ma-partie.feature @@ -13,25 +13,26 @@ Fonctionnalité: Revoir ma partie avec le bilan et l'analyse Scénario: Que dit le bilan d'une partie ? Le bilan compte vos décisions par appréciation, traduit votre jeu en niveau, et dit en une phrase ce qui a fait la différence : votre jeu, - celui de l'ordinateur, ou les dés. + celui de l'ordinateur, ou les dés. Ici, après 6/5 5/off, l'ordinateur + est sûr de sortir ses deux derniers pions : il double, et vous passez. Étant donné qu'il vous reste deux pions, sur vos points 6 et 1, et à l'ordinateur deux pions sur ses points 1 et 2 Et que vous avez 6-1 à jouer Quand vous choisissez le coup 6/5 5/off - Et que l'ordinateur sort ses deux pions avec 2-1 + Et que l'ordinateur, sûr de gagner, double et que vous passez Alors la partie est finie, gagnée par l'ordinateur Et le bilan compte une grosse erreur Et sa phrase dit ce qui a fait la différence, et comment étaient vos dés Scénario: Quel est le coup à revoir ? - C'est votre décision qui a perdu le plus d'équité selon le moteur. Le + C'est votre décision qui a perdu le plus d'équité, d'après le maître. Le bilan la montre sur le plateau, avec le coup que le maître aurait joué ; « Revoir ce coup » ouvre l'analyse sur ce coup. Étant donné qu'il vous reste deux pions, sur vos points 6 et 1, et à l'ordinateur deux pions sur ses points 1 et 2 Et que vous avez 6-1 à jouer Quand vous choisissez le coup 6/5 5/off - Et que l'ordinateur sort ses deux pions avec 2-1 + Et que l'ordinateur, sûr de gagner, double et que vous passez Alors le coup à revoir est votre coup 6/off, le premier de la partie Et le maître y aurait joué 6/off 1/off Et la courbe de vos chances de gagner finit à 0 % @@ -44,10 +45,10 @@ Fonctionnalité: Revoir ma partie avec le bilan et l'analyse Étant donné qu'il vous reste deux pions, sur vos points 6 et 1, et à l'ordinateur deux pions sur ses points 1 et 2 Et que vous avez 6-1 à jouer Quand vous choisissez le coup 6/5 5/off - Et que l'ordinateur sort ses deux pions avec 2-1 + Et que l'ordinateur, sûr de gagner, double et que vous passez Et que vous rejouez d'ici le coup à revoir Alors vous avez de nouveau 6-1 à jouer - Quand vous choisissez cette fois le coup 6/off 1/off + Quand vous choisissez cette fois le coup 1/off 6/off Alors la partie est finie, gagnée par vous Et la partie a deux branches, dont la partie d'origine, intacte