Un plateau, une seule règle, une profondeur trompeuse
Othello (ou Reversi) tient dans une phrase : je pose un pion sur une case vide de façon à encadrer une ou plusieurs lignes de pions adverses entre ce nouveau pion et un autre des miens, et toute la ligne prise en tenaille se retourne à ma couleur. Derrière cette règle unique se cache une richesse tactique redoutable — c'est justement ce qui en fait un bon banc d'essai pour une IA, sans moteur de jeu ni la moindre dépendance.
Capturer par encadrement
Tout part de là. Depuis la case jouée, je pars dans les huit directions ; tant que je longe des pions adverses, je les mémorise ; si je finis par retomber sur un pion à moi, la ligne est bornée des deux côtés et se retourne. Si je sors du plateau ou tombe sur une case vide avant, cette direction ne capture rien. Un coup n'est légal que s'il retourne au moins un pion : c'est la même fonction de calcul des retournements qui sert à valider le coup et à l'appliquer.
Énumérer les coups légaux — et savoir passer
À chaque tour, je balaie les cases vides et je ne retiens que celles qui capturent au moins un pion : c'est l'ensemble des coups légaux, que je surligne discrètement pour vous. Cette même énumération pilote toute la mécanique de partie : si un camp n'a aucun coup légal, il passe et la main revient à l'autre ; si aucun des deux ne peut jouer, la partie s'arrête et la majorité de pions l'emporte. Le dernier coup joué reste cerclé pour que vous suiviez le fil.
Une IA négamax à profondeur limitée
L'arbre des parties d'Othello est bien trop vaste pour être exploré en entier : l'IA anticipe donc sur un horizon borné. Elle utilise le négamax — la forme compacte du minimax pour un jeu à somme nulle, où le score d'un nœud est simplement l'opposé du meilleur score de l'adversaire — accéléré par un élagage alpha-bêta qui coupe les branches déjà condamnées. J'ordonne les coups des coins vers le centre pour que l'élagage morde plus tôt, et en fin de partie, quand il reste peu de cases vides, je passe en résolution exacte jusqu'au dernier pion.
Une heuristique qui pense comme un joueur
Faute d'aller jusqu'au bout, l'IA a besoin d'estimer une position. Mon heuristique combine deux idées bien connues des joueurs : une carte de poids positionnels — un coin vaut une fortune car il ne se reprend jamais, les cases qui le jouxtent sont des pièges car elles l'offrent, les bords stables sont bons — et la mobilité, c'est-à-dire le nombre de coups légaux dont on dispose face à ceux de l'adversaire. Compter bêtement ses pions en milieu de partie est au contraire un mauvais guide : la majorité ne se fige qu'à la fin.
Ce que ce petit jeu dit de ma façon de travailler
Une règle limpide, une implémentation directe, et un adversaire crédible obtenu sans bibliothèque ni magie : juste les bons algorithmes, dimensionnés pour la contrainte réelle — ici, un temps de réflexion imperceptible dans le navigateur. C'est exactement la démarche que j'applique à vos projets : choisir la bonne dose de complexité au bon endroit, écrire un code qu'on peut relire et faire évoluer, et livrer quelque chose qui tient la route plutôt qu'une prouesse illisible.