Modes actuels : deux joueurs locaux ou 1v1 à distance. Les descriptions d’annulation immédiate, de confirmation locale et de stockage dans le composant ci-dessous concernent le mode local. Le mode distant utilise un serveur et l’accord de l’adversaire ; voir la section dédiée en fin de fiche et le guide de déploiement (../DEPLOIEMENT_JEUX.md).
Fiche comparée aux sources, à l’interface et au catalogue le 26 octobre 2026. Voir l’audit commun des neuf activités (../JEUX.md#validation-documentaire). Les comptes de tests et recettes navigateur datés plus bas sont des vérifications historiques, pas un état de validation global actuel.
Accès et comportement
Jeu à deux local, rubrique publique jeux-meta-morpion, route /rubriques/jeux-meta-morpion, dossier Ressources/Jeux/Jeux de strategie/Meta Morpion. Carte après le jeu du moulin. Nom affiché : Méta Morpion ; nom anglais dans le lien vers les règles. Composant src/components/MetaMorpion.svelte.
Neuf grilles 3 × 3 dans un grand 3 × 3. Bleu/croix commence, rouge/rond suit. Premier coup libre. L’indice local de la case jouée impose la grille suivante. Une grille gagnée ou pleine est fermée ; renvoi vers elle donne le choix parmi les grilles ouvertes. Une grille nulle ne compte pour personne. Trois grilles gagnées alignées donnent la victoire ; toutes fermées sans alignement donnent le nul. Pas de limite réglable : au plus 81 poses.
Couleurs bleu #2365a0 et rouge #ae4433, fond pâle, grilles jouables bordées de vert, dernier coup encadré de doré. Grilles terminées marquées d’un grand symbole (croix et ronds agrandis de 30 % par rapport au rendu initial), ou d’un tiret et Nulle ; leurs anciens coups restent visibles en atténué. Alignement global gagnant encadré de doré. Nombre de petites grilles gagnées sous chaque joueur. Consigne indiquant la position de la grille imposée (haut à droite, centre…). Clic valide immédiatement ; coup invalide refusé avec message. Le bouton Annuler prend la couleur de l’auteur du dernier coup. Annuler restaure la position précédente, la contrainte, les résultats locaux et la fin de partie. Nouvelle partie demande confirmation. Aucun compte ni nouvelle dépendance. En mode local, aucun appel API ni stockage persistant ; recharger recommence.
Clavier : un arrêt Tab sur le plateau, flèches selon les coordonnées visuelles du grand 9 × 9, y compris aux frontières des petites grilles, sans bouclage aux bords. Entrée/Espace valide. Cases non autorisées focusables mais pas jouables. Plateau défilant sur petit écran. Pas de sélecteur de variante ou d’IA.
Sources vérifiées : https://en.wikipedia.org/wiki/Ultimate_tic-tac-toe et https://mathwithbaddrawings.com/2013/06/16/ultimate-tic-tac-toe/ . La variante laissant jouer dans une grille déjà gagnée n’est pas utilisée.
Moteur et format
src/lib/meta-morpion.mjs : META_LINES (huit alignements), winningLine, initialMeta, allowedBoards, legalMetaMoves, metaMoveError, playMeta, nextMetaCell.
État : boards (9 tableaux de 9, −1 vide / 0 bleu / 1 rouge), results (9 valeurs : −1 ouverte / 0 bleu / 1 rouge / 2 nulle), player, required (indice de grille ou null pour libre), moves, last ({board,cell,player} ou null), over, winner (0/1 ou null), winningBoards (indices de la ligne globale gagnante). Ne pas confondre results=2 avec un joueur ; winningLine ignore 2 et −1. winner=null ne signifie nul que si over=true.
Indices board et cell en ordre ligne par ligne de 0 à 8. L’identifiant clavier vaut board*9+cell, mais ne suit pas l’ordre visuel du 9 × 9 : nextMetaCell fait la conversion. playMeta(s,board,cell) valide, copie les tableaux, résout la grille locale puis globale, et calcule required à partir des résultats APRÈS le coup. Le cas où le coup gagne la grille vers laquelle il renvoie est couvert. Les anciens états ne sont pas modifiés ; historique géré dans le composant.
Futur ordinateur (non implémenté)
legalMetaMoves donne les couples {board,cell}, playMeta simule la transition. Une recherche doit tenir compte de required et des grilles fermées, et distinguer victoire globale de gain local. Clé de cache : contenu, résultats locaux, camp et contrainte. Les symétries doivent transformer à la fois les indices de grille, de case et required. Aucun algorithme ni niveau de difficulté validé. Prévoir Worker annulable, jeton de partie/requête, refus des réponses périmées après annulation/reprise et verrou des clics pendant calcul ; définir camp et annulation solo avant développement.
Validation
tests/meta-morpion.test.mjs : 81 coups initiaux, renvoi, validation et immutabilité, huit lignes locales/globales pour les deux joueurs, fermeture et nul local, libération de contrainte, victoire au dernier coup, nul global, états antérieurs, clavier traversant les grilles et vingt parties complètes déterministes. Tactile à vérifier sur appareil. Validation du 26 octobre 2026 : 127 tests passent, compilation réussie. Navigateur : pose immédiate, renvoi de grille, annulation rétablissant le libre choix, partie complète avec fermeture des grilles et victoire globale, alignement doré, annulation après victoire, abandon de nouvelle partie sans perte, Tab/flèches/Espace traversant une frontière de petite grille vérifiés. Nuls locaux/globaux et refus des coups illégaux couverts par les tests du moteur.
Mode distant — 27 octobre 2026
Aucun réglage optionnel, même plateau de neuf grilles. Le serveur impose la grille de destination et les grilles fermées. Annuler restaure la dernière pose, les résultats locaux et la contrainte précédente.
OnlineLobby.svelte gère création, invitation, présence et consentement ; OnlineSettings.svelte gère les options de l’hôte. L’invité ne peut pas les changer. Les API contrôlent la rubrique de ce jeu et réutilisent son moteur pur. Plateaux/historiques en mémoire serveur, clé de place dans sessionStorage (meta-morpion-online-seat-v1). Recharger le même onglet retrouve le salon tant qu’il existe ; redémarrer le serveur le perd. Sélections préparatoires non envoyées non sauvegardées.
Annulation et nouvelle partie nécessitent l’accord adverse ; délai de demande d’une minute. Une coupure suspend le jeu et réserve la place cinq minutes par défaut. Ces délais et le plafond global sont décrits dans le contrat commun. La validation distante (tests de service, parties complètes, HTTP/SSE et scénario navigateur propre à ce jeu) est consignée dans cette fiche commune ; le tactile et l’hébergement public restent à valider. Les anciennes recettes datées ci-dessus restent un historique du mode local.
Revanche distante : le salon reste ouvert après victoire ou nul, jusqu’au départ ou à son expiration. Chaque nouvelle partie acceptée alterne le premier joueur (hôte, invité, hôte…), qui reçoit le joueur 1 et le bleu au départ. Les droits de l’hôte restent inchangés. Refus, retrait, expiration de demande, annulation de coup et reconnexion ne changent pas cet ordre. Voir les champs starterRole/playerIndex, délais et vérifications dans le contrat commun.