diff --git a/docs/plans/2026-11-03-coup-adverse.md b/docs/plans/2026-11-03-coup-adverse.md index fe69c17..4ec4d36 100644 --- a/docs/plans/2026-11-03-coup-adverse.md +++ b/docs/plans/2026-11-03-coup-adverse.md @@ -2,7 +2,7 @@ - **Date** : 2026-11-03 - **Étape** : 0d (retour de Pierre sur le plateau publié) -- **Statut** : en cours +- **Statut** : terminé - **Exécutant** : sous-agent general-purpose, dans un worktree isolé ## Objectif @@ -74,4 +74,72 @@ tests, difficultés, écarts au plan. ## Résultat -À remplir à la clôture. +Terminé le 2026-11-03, branche `coup-adverse-travail`. + +**Domaine** (`app/src/domain/game/game.ts`) : `Game.lastMoveSteps()` donne le +dernier coup joué demi-coup par demi-coup (`MoveSteps` : camp, demi-coups, +plateaux successifs, pions frappés). Les plateaux intermédiaires viennent du +moteur : `checkHalfMoves` sur les premiers demi-coups depuis la position +d'avant le coup, puis `board`. Un pion frappé se lit sur le plateau du moteur +(la barre adverse grossit), aucune règle n'est rejouée. Le format des +événements ne change pas. + +**Interface** : +- `board-model.ts` : `moveTrace()` calcule les traces (une flèche par + demi-coup, pions arrivés, pions partis, pions frappés). Un pion qui fait + étape (13/7 7/4) ne laisse rien sur la case d'étape. Testé sous Node. +- `board-view.ts` : traces dessinées en laiton (`--last-move`, comme le + demande la charte) : flèches avec pointe, pions arrivés entourés, pion + fantôme en pointillés à la case de départ, pion frappé entouré en + pointillés sur la barre. Les petits points orange ont disparu. La + géométrie des piles est regroupée dans `slotCenter()`. Le pion du dessus de + chaque endroit porte `data-checker`. `slideChecker()` le fait glisser avec + `Element.animate` (API du navigateur, sans bibliothèque). +- `app.ts` : après le tour de l'ordinateur, le plateau est redessiné à + chaque étape et le pion arrivé glisse en 0,4 s depuis sa case de départ. Un + pion frappé glisse en même temps vers la barre. Ensuite viennent les traces + et le bouton « Revoir ». Tout s'efface à l'action suivante (lancer, + doubler, prendre, passer, nouvelle partie, toucher un pion). Avec + `prefers-reduced-motion: reduce`, les traces s'affichent directement. + L'animation commence une fois le moteur fini : le temps affiché reste celui + du moteur. Les touches sont ignorées pendant l'animation (au plus 0,4 s par + demi-coup). Une partie reprise juste après le coup de l'ordinateur montre + ses traces sans l'animer. +- Textes `replay` et `replayTitle` dans `texts.ts`, bouton `#replay` dans + `web/index.html`. + +**Scénario** « Voir le coup de l'ordinateur » dans +`docs/scenarios/jouer-une-partie.feature`. Il part d'une position où le seul +coup permis de l'ordinateur avec 3-1 frappe votre blot (13/10* 10/9), avec le +videau chez vous pour qu'il ne double pas. Ses étapes vérifient les plateaux +case par case, le pion frappé qui part sur la barre et un second appel +identique (« revoir »). + +**Tests** : +- `app/tests/move-steps.test.ts` (vrai moteur) : coup simple, pion frappé, + coup depuis la barre qui frappe en rentrant, sortie jusqu'à la fin de + partie, coup de l'ordinateur, aucun coup. +- `app/tests/ui.test.ts` : traces d'un coup simple, d'un pion qui fait + étape, d'une rentrée avec un pion frappé, d'une sortie. +- `tests/browser/play.mjs` : après chaque action, les traces sont là si le + dernier coup est celui de l'ordinateur (autant de flèches que de + demi-coups, au moins un pion entouré et un fantôme, « Revoir » visible), et + absentes sinon. « Revoir » est essayé deux fois. La première fois, des + animations tournent et les flèches disparaissent pendant l'animation, puis + les mêmes traces reviennent ; une capture `coup-adverse` est prise. La + seconde fois, en mouvement réduit, aucune animation ne tourne et les traces + reviennent. +- Résultats : `make lint` sans problème ; `make test` 10/10 ; `make + test-browser` vert sous Chromium (coup de l'ordinateur montré 26 fois) et + Firefox (43 fois), sans violation CSP ni erreur dans la page. + +**Limites** : +- Aucune des deux parties du navigateur n'a vu l'ordinateur frapper (0 pion + frappé signalé). L'animation vers la barre n'est donc vérifiée que par le + scénario et les tests unitaires (plateaux et traces), pas dans un + navigateur. +- Firefox a affiché un tour de l'ordinateur à 4,4 s au plus. Ce temps est + mesuré avant l'animation, qui n'y est pour rien : c'est le moteur sous + Firefox sur le PC de 2011. Chromium : 0,6 s au plus. +- Sur une case de plus de cinq pions, c'est le cinquième pion dessiné qui + glisse (le nombre reste affiché sur la pile).