Coup de l'ordinateur montré, aucun coup possible, dés et videau touchables #19
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user