Aller au contenu principal
sports_esports Lab Canvas 2D Négamax alpha-bêta Heuristique positionnelle Clic · tactile

Othello — une IA négamax alpha-bêta à heuristique positionnelle en Canvas 2D

Le grand classique de l'encadrement, réécrit from scratch en Canvas 2D : capture par retournement des lignes prises en tenaille, énumération des coups légaux (avec passe forcée quand un camp ne peut jouer) et une IA négamax à élagage alpha-bêta guidée par une heuristique positionnelle — coins ≫ bords ≫ centre — et la mobilité. Résolution exacte en fin de partie. Zéro dépendance.

Clic ou tap sur une case légale (surlignée) Espace : rejouer

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.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward