diff --git a/docs/feuille-de-route.md b/docs/feuille-de-route.md index b5a8b6e..67637ba 100644 --- a/docs/feuille-de-route.md +++ b/docs/feuille-de-route.md @@ -21,6 +21,7 @@ garde-fous d'architecture (0d.1), déploiement sur https://ustagammon.sans.pub. | Sous-étape | Contenu | État | Plan | | --- | --- | --- | --- | | 0d.2 | Plateau minimal jouable (PWA hors ligne), publié ; reste la vérification avec Pierre sur le Fairphone 4 (`docs/guide-test-etape-0.md`, section « Étape 0d ») | 🔄 | | +| 0d.2+ | Montrer le coup de l'ordinateur (animation, traces, « Revoir ») : retour de Pierre | 🔄 | `plans/2026-11-03-coup-adverse.md` | **Critère de fin** : une partie complète jouée sur le Fairphone 4, moins de 2 s par coup de l'IA en niveau standard, tous les tests au vert. diff --git a/docs/plans/2026-11-03-coup-adverse.md b/docs/plans/2026-11-03-coup-adverse.md new file mode 100644 index 0000000..fe69c17 --- /dev/null +++ b/docs/plans/2026-11-03-coup-adverse.md @@ -0,0 +1,77 @@ +# Montrer le coup que l'ordinateur vient de jouer + +- **Date** : 2026-11-03 +- **Étape** : 0d (retour de Pierre sur le plateau publié) +- **Statut** : en cours +- **Exécutant** : sous-agent general-purpose, dans un worktree isolé + +## Objectif + +Après le coup de l'ordinateur, le joueur voit ce qui a bougé sans lire la +notation. Choix de Pierre : **animation puis traces**. + +## Consignes + +1. **Animation** : quand l'ordinateur joue, ses pions glissent un par un, un + demi-coup après l'autre (environ 0,4 s chacun), de la case de départ à la + case d'arrivée. Un pion frappé part sur la barre de façon visible. Si le + système demande moins d'animations (`prefers-reduced-motion`), pas + d'animation : on passe directement aux traces. +2. **Traces** : une fois l'animation finie, et jusqu'à la prochaine action du + joueur (lancer les dés, doubler, prendre, passer, toucher un pion) : + - une flèche de chaque case de départ vers sa case d'arrivée ; + - les pions déplacés entourés ; + - à la case de départ d'un pion parti, un pion « fantôme » (contour + seul) ; + - un pion frappé signalé sur la barre. + Les petits points orange actuels sont remplacés par ces traces. +3. **Bouton « Revoir »** à côté des boutons d'action : il rejoue l'animation du + dernier coup de l'ordinateur, puis remet les traces. Il disparaît dès que + le joueur agit. +4. **Où vit la logique** : la liste des demi-coups du dernier coup de + l'ordinateur et les positions intermédiaires viennent du domaine (le journal + contient déjà `MovePlayed` avec ses demi-coups ; ajouter si besoin une + fonction qui donne la suite des plateaux intermédiaires, à partir du + moteur, sans réimplémenter de règle : par exemple `checkHalfMoves` ou le + décodage de position à chaque étape). L'interface ne fait que dessiner. + Les garde-fous d'architecture existants doivent passer. +5. **Textes** dans `app/src/ui/texts.ts` ; mots du glossaire. +6. **Scénario** (ADR 0008) : ajouter à `docs/scenarios/jouer-une-partie.feature` + un scénario « Voir le coup de l'ordinateur », écrit en intentions (par + exemple : quand l'ordinateur a joué, alors son coup vous est montré case par + case, et vous pouvez le revoir), avec ses étapes Cucumber sur le domaine. +7. **Tests** : + - tests unitaires de ce qui est calculable hors navigateur (traces et + plateaux intermédiaires d'un coup avec et sans pion frappé, coup depuis la + barre, sortie de pions) ; + - `make test-browser` (`tests/browser/play.mjs`) : après un coup de + l'ordinateur, les flèches et les pions entourés sont présents ; « Revoir » + rejoue puis les remet ; tout disparaît à l'action suivante ; capture + d'écran `coup-adverse` ; + - `make lint`, `make test` et `make test-browser` verts. + +Contraintes : +- `CLAUDE.md`, ADR 0007, 0008, 0009 : simplicité, pas de framework ni de + bibliothèque d'animation (animations CSS ou `requestAnimationFrame`), + identifiants en anglais, commentaires et textes en français ; +- aucune règle du jeu réimplémentée ; +- l'animation ne doit pas retarder le moteur ni bloquer la saisie au-delà de + sa durée ; le temps de calcul affiché reste celui du moteur ; +- ne pas publier, ne pas pousser, ne pas créer de merge request ; +- commits petits, en français, avec la ligne + `Co-Authored-By: Claude Opus 5.5 `. + +Rapport attendu : ce qui a été fait, captures d'écran (chemins), résultat des +tests, difficultés, écarts au plan. + +## Critères de réussite + +- Dans Chromium et Firefox sans interface, après chaque coup de l'ordinateur : + animation (ou traces directes en mouvement réduit), traces visibles, « Revoir » + fonctionnel, traces effacées à l'action suivante. +- Le scénario « Voir le coup de l'ordinateur » passe dans `make test`. +- `make lint`, `make test` et `make test-browser` passent. + +## Résultat + +À remplir à la clôture.