# Match, niveaux et réglages (1c) - **Date** : 2026-11-03 - **Étape** : 1c (`docs/etape-1.md`) - **Statut** : fait (2026-11-09), en attente de vérification - **Exécutant** : sous-agent general-purpose, dans un worktree ## Objectif Choisir sa partie : partie libre ou match en N points, avec les règles de Crawford et de Jacoby, contre l'ordinateur au niveau voulu. ## Consignes ADR 0007, 0008. Le moteur expose depuis 1a les niveaux de gnubg (`levelMove`, `levelCubeDecision`) et accepte les matchs dans son API C. 1. **Domaine** : longueur de match, score, règle de Crawford (partie Crawford et suivantes, calculées par le moteur via le Match ID), règle de Jacoby en partie libre ; enchaînement des manches d'un match jusqu'à sa fin ; le journal d'événements reste rétrocompatible (les parties existantes se rechargent). 2. **Adaptateur** : `EngineCube` étendu au match (score, longueur, Crawford) ou remplacé par le Match ID, sans casser les appels existants. 3. **Niveau de l'ordinateur** : ses coups et ses décisions de videau au niveau choisi. Reprendre de `ComputerTurn` (gnubg, `play.c`) les règles de déroulement non reprises en 1a : pré-filtre « fenêtre de marché » et double facultatif à 0 pli, avec citation des sources. 4. **Écran de nouvelle partie** (maquettes de la session « identité » si disponibles, sinon sobre et conforme à la charte) : type de partie, niveau (noms montrés au joueur à proposer simplement : Débutant, Amateur, Intermédiaire, Avancé, Expert, Champion — correspondance avec les niveaux de gnubg documentée), conseil du maître activé ou non. Par défaut : partie libre, Intermédiaire, conseil activé. Le réglage est mémorisé. 5. Affichage du score de match et de la partie Crawford sur le plateau. 6. Scénarios Gherkin (match en 3 points jusqu'au bout avec dés imposés, Crawford, Jacoby) et fiches du glossaire (match, Crawford, Jacoby si absentes). `make lint`, `make test`, `make test-browser` (un match court). ## Critères de réussite Un match en 3 points se joue jusqu'au bout, au niveau choisi, avec Crawford appliqué ; les trois commandes passent. ## Résultat 2026-11-09, branche `match-et-reglages` (sur `accueil-tutoriel-aide` puis `main` fusionnées). **Fait** 1. **Moteur** (une seule recompilation, `engine.c` et `engine-cli/main.c`) : `engine_level_double_decision` et `engine_level_take_decision` reprennent `ComputerTurn` (gnubg, `play.c` l. 1312-1398 et 1139-1235) : accès au videau et videau < 4096, pré-filtre « fenêtre de marché » (évaluation sans videau à un pli de moins, `GetDoublePointDeadCube`), double facultatif seulement à 0 pli avec plus de 0,001 de gain, réponse au double selon la décision (castors joués comme une prise). `engine_match_after_game` : score, fin du match, partie Crawford suivante (`play.c` l. 1817-1820 ; partie Crawford déjà jouée lue comme gnubg, l. 303 et 4277). engine-cli : `double`, `take`, `aftergame`, `matchid` étendu aux matchs. Tests dans `tests/test_engine.sh`. 2. **Domaine** : `Match`, `MatchAfterGame` (`match.ts`), niveaux montrés (`level.ts` : Débutant beginner, Amateur casual, Intermédiaire intermediate, Avancé advanced, Expert 0ply, Champion 2ply ; documenté dans `docs/glossaire/niveau-de-jeu.md`). `Game` : niveau et match portés par `GameStarted`, ordinateur par `levelMove`/`levelDouble`/`levelTake`, `GameEnded.match` donné par le moteur, `nextGame` pour la partie suivante. `EngineCube` étendu au match (vu du joueur au trait) ; le Match ID est écrit par le moteur, liens de position compris. Chaque partie d'un match est une partie enregistrée à part. 3. **Format** : événements en version 2, migration testée des journaux de la version 1 (niveau 2 plis explicite) ; résumé avec `match` facultatif ; quatre réglages nouveaux avec valeur par défaut. Amendement de l'ADR 0007. 4. **Écran `#/nouvelle-partie`** (charte 1c) : segments partie libre/match, longueurs 3/5/7/11, phrases et liens Crawford/Jacoby, six barres de niveau, conseil du maître, barre d'action collée en bas ; choix gardés. Ouvert par le menu (lien), l'accueil et la fin de partie ; « Partie suivante » dans un match qui continue. Adresse ajoutée à l'ADR 0013. 5. **Score** : ligne « Match en N points · partie Crawford », pastilles dans les bandeaux, case « sur N » dans la colonne de commandes en paysage, texte pour le lecteur d'écran ; videau caché pendant la partie Crawford ; panneau de fin de partie et de fin de match. 6. **Tests** : `jouer-un-match.feature` (niveau, match en 3 points jusqu'au bout avec dés imposés, Crawford, Jacoby), `match.test.ts`, tests du domaine (match, migration), `tests/browser/match.mjs` (écran, match en 3 points joué par l'interface jusqu'au bout, rechargement en cours de match ; captures dans `build/browser-shots/match/`). `play.mjs` adapté au passage par l'écran « Nouvelle partie ». **Écarts** - Le moteur C a changé (fonctions ajoutées, rien de gnubg modifié). - Le « conseil du maître » n'est qu'un réglage gardé : il n'existe pas encore (1d). - « Mes parties » liste chaque partie d'un match séparément, sans afficher le match ; le résumé porte pourtant `match` pour le faire plus tard. - Le numéro de la partie dans le match n'est pas gardé (SGF : `game:0`). - Longueur par défaut d'un match : 5 points (la charte ne la fixe pas). **Suites** : affichage du match dans « Mes parties » ; recette design des captures ; essai sur le Fairphone 4 (temps du niveau Champion).