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 interface
Jeu disponible dans Jeux → Jeux de stratégie. Rubrique publique jeux-reversi, route /rubriques/jeux-reversi. Titre de page et carte : Reversi. Deux joueurs sur le même appareil, ou dans un salon privé à distance depuis le 27 octobre 2026. Les comportements locaux décrits ci-dessous restent inchangés ; voir la section distante pour les exceptions. Plateau 8 × 8 par défaut, option 6 × 6 avant le premier coup ou lors de la confirmation de Nouvelle partie. Annuler cette confirmation conserve la partie et sa taille. Le bloc d’attente est supprimé ; règles éditoriales conservées dans Ressources et rendues dans le slot du composant, avant les options. Source éditoriale : Ressources/Jeux/Jeux de strategie/Reversi/_rubrique.json, bloc jeux-reversi-regles. Seul ce bloc est extrait par la route commune ; les autres blocs restent après le jeu.
Joueur 1 bleu #2365a0, joueur 2 rouge #ae4433 ; fond de plateau pâle, scores visibles. Quatre pions centraux, bleu commence. Un clic valide immédiatement un coup légal et retourne tous les pions encadrés. Contour doré sur le dernier pion posé. Option Afficher les coups légaux désactivée par défaut, modifiable à tout moment, surlignage vert pâle. Ce choix est conservé après annulation ou nouvelle partie ; recharger le remet à faux. Aucun bouton de confirmation du coup. Annuler le dernier coup est coloré selon son auteur et restaure plateau, scores, joueur, dernier coup, passe éventuelle et état de fin.
Sans coup légal, le joueur passe automatiquement et un message annonce qui rejoue. Si les deux camps sont bloqués, la partie se termine même avec des cases vides. Décompte des pions réellement présents, sans attribution des cases vides ; égalité possible. Aucun passage volontaire. Clavier : un arrêt Tab sur le plateau, flèches suivant les cases sans débordement de ligne, Entrée/Espace pour jouer. Cases illégales focusables mais non jouables. Plateau défilant horizontalement sur petit écran.
Règles classiques vérifiées sur https://www.worldothello.org/about/about-othello/othello-rules/official-rules/english ; le format 6 × 6 et les couleurs sont des adaptations locales.
Moteur et stockage
src/lib/reversi.mjs : REVERSI_SIZES=[8,6], initialReversi(size=8), captures(state,cell,player=state.player), legalMoves(state,player=state.player), playReversi(state,cell). Composant src/components/Reversi.svelte. Le mode local n’utilise aucun service. Le mode distant utilise src/lib/online et les API /api/online ; aucune dépendance supplémentaire.
État : size, board (−1 vide, 0 bleu, 1 rouge, index ligne*size+colonne), player, scores, moves (poses uniquement), last, flipped (indices retournés), passed (joueur ayant passé automatiquement après la pose, ou null), over, winner (0/1 ou null). Une égalité exige over=true et winner=null. legalMoves retourne [] après la fin, tandis que captures calcule seulement l’encadrement sans vérifier over. À la fin, player ne désigne pas nécessairement le vainqueur : lire winner et over. Les huit rayons sont examinés avant toute mutation : pas de capture en cascade, saut de vide/allié ou retour d’une ligne à la suivante. Transitions immuables ; historique dans le composant. En mode local : aucun stockage persistant ni envoi de coups ; recharger revient au 8 × 8 initial. En mode distant : serveur autoritaire, historique en mémoire serveur et clé de place dans sessionStorage pour restaurer le même salon au rechargement.
Futur adversaire ordinateur (non implémenté)
Générer les coups avec legalMoves et simuler via playReversi. Ne pas supposer une alternance systématique du joueur : la transition inclut la passe forcée. Mettre taille, plateau et joueur dans les clés de recherche ; utiliser le score terminal réel et distinguer les critères heuristiques. Prévoir Worker annulable, identifiant de partie/requête, rejet des réponses périmées après annulation/nouvelle partie, et blocage des entrées humaines pendant le calcul. Définir le camp, la difficulté et la politique d’annulation solo avant implémentation. Aucun niveau d’IA n’est présent ni évalué.
Validation
tests/reversi.test.mjs : ouvertures 6/8, validation et immutabilité, huit directions, absence de cascade/saut/débordement, passe automatique, retour à l’état précédent, fin avant plateau plein, égalité et parties complètes sur les deux tailles. Les interactions tactiles restent à vérifier sur appareil.
Validation du 26 octobre 2026 : 112 tests passent et compilation réussie. Navigateur : ouverture 8 × 8, activation de l’aide, pose immédiate avec retournement et contour, annulation avec restitution du score, sélection 6 × 6, entrée Tab/flèches/Espace, partie complète 6 × 6 (18–18), annulation après fin et abandon d’un changement de taille sans perte de partie vérifiés. Les passes et captures dans les huit directions sont couvertes par les tests du moteur.
Mode distant — 27 octobre 2026
Voir Jeu à distance pour le protocole, les variables de capacité/délais, les accès, le stockage et l’extension aux autres jeux. L’hôte décide de la taille et de l’aide partagée ; l’invité ne peut pas les modifier, quelle que soit leur couleur dans la partie. La taille se choisit avant lancement ou dans une proposition de nouvelle partie ; l’aide peut changer en cours de jeu. Annulation et nouvelle partie exigent l’accord de l’adversaire. Une demande suspend les coups pendant au maximum une minute. Reconnexion du même onglet, réservation de cinq minutes par défaut ; départ explicite ferme le salon pour les deux. Les passes restent automatiques, la fin reste celle du moteur local. Aucun plafond de tours n’est ajouté au Reversi.
Validation réalisée le 27 octobre 2026 : les 177 tests du projet passent, dont 10 tests du service distant, et la compilation réussit. Recette HTTP/SSE réussie sur le serveur de développement puis sur le serveur compilé lancé temporairement sur un port distinct : création/entrée, synchronisation, annulation consentie, coupure/reconnexion et fermeture. Recette navigateur à deux onglets réussie : invitation préremplie, réglages 6 × 6 et aide propagés, contrôles réservés à l’hôte, coups des deux camps, annulation acceptée, reprise après rechargement, nouvelle partie 8 × 8 acceptée et fermeture des deux côtés. Retour au mode local avec pose/annulation vérifié. Le refus, les demandes périmées et les délais/capacités sont vérifiés par les tests automatisés, pas par attente chronométrée au navigateur. Aucun déploiement public ni essai de charge effectué.
Le service est désormais partagé avec les six autres jeux de stratégie. Les réglages et l’interface Reversi restent ceux de cette fiche. Référence d’exploitation : Déploiement des jeux (../DEPLOIEMENT_JEUX.md). Validation commune après extension : 191 tests et recettes HTTP/SSE des sept jeux réussis ; détails dans Jeu à distance.
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.