Aller au contenu principal
sports_esports Lab Canvas 2D IA probabiliste Heatmap Chasse / cible

Bataille navale — une IA de ciblage par carte de probabilité en Canvas 2D

La bataille navale réécrite from scratch en Canvas 2D, avec une IA qui ne tire jamais au hasard : elle recalcule à chaque tour une carte de probabilité (heatmap) des placements possibles des navires restants pour viser les cases les plus probables, puis pilonne autour d'un impact — en alignant ses tirs — jusqu'à couler. Flottes placées aléatoirement, chasse et cible unifiées dans une seule carte, zéro dépendance.

Clic ou tap sur la grille adverse : tirer Espace : nouvelle partie

Un classique de déduction, deux grilles et un vrai adversaire

La bataille navale tient en peu de règles : deux flottes de cinq navires placées au hasard sur des grilles 10 × 10, et un échange de tirs jusqu'à ce qu'une flotte coule. La vôtre est visible à droite, celle de l'IA reste cachée à gauche. C'est un terrain idéal pour montrer l'essentiel : non pas le rendu, mais la qualité de décision d'un adversaire qui ne triche pas et ne voit, comme vous, que le résultat de ses propres tirs.

Le mode chasse : une carte de probabilité, pas un tir au hasard

Tant qu'aucun navire n'est en cours de destruction, l'IA est en chasse. Plutôt que de tirer au petit bonheur, elle recalcule à chaque tour une carte de probabilité : pour chaque navire encore à flot, elle fait glisser toutes ses positions possibles — horizontales et verticales — sur la grille, et compte, case par case, combien de placements y survivent encore. Une case traversée par beaucoup de configurations possibles est une case probable ; elle vise le maximum. Cette densité fait naturellement émerger un damier de parité (un gros navire ne peut pas éviter une case sur deux) et concentre le feu là où il reste de la place. Sur la grille de droite, l'eau tire vers l'indigo là où cette probabilité est la plus forte : vous voyez, en direct, où l'IA réfléchit.

Le mode cible : pilonner autour d'un impact jusqu'à couler

Dès qu'un tir touche sans couler, la logique bascule. Les placements qui recouvrent cet impact reçoivent un poids très supérieur dans la même carte : la probabilité se concentre aussitôt sur les quatre cases voisines. Au deuxième impact, l'IA a identifié un axe — un navire est droit — et les placements alignés dominent tout le reste : elle prolonge la ligne aux deux extrémités et aligne ses tirs jusqu'à achever le navire. Une fois coulé, ses cases deviennent mortes, le bonus disparaît, et l'IA repasse en chasse. Chasse et cible ne sont pas deux algorithmes séparés : c'est la même carte de probabilité qui change de forme selon ce qu'elle sait.

Une IA qui n'a accès qu'à ses tirs

Toute la difficulté est là : l'IA raisonne sur sa seule connaissance — touché, à l'eau, coulé — exactement comme un joueur humain. Elle tient à jour la liste des tailles de navires qui vous restent et la liste des impacts non résolus, et n'utilise jamais la position réelle de votre flotte. Recalculer la carte complète à chaque tour reste instantané : une centaine de cases, cinq tailles de navires, quelques centaines de placements testés. On tient les 60 images par seconde sans effort, en quelques kilo-octets de JavaScript et zéro dépendance.

Ce que je transpose sur vos projets

Derrière ce petit jeu, il y a une conviction que j'applique aux projets sérieux : une bonne décision se calcule sur ce que l'on sait vraiment, pas sur une intuition ni sur des données auxquelles on ne devrait pas avoir accès. Modéliser explicitement l'information disponible, en tirer une probabilité, choisir l'action qui maximise la valeur attendue — puis rendre ce raisonnement lisible plutôt que magique : c'est la même rigueur que j'apporte à un moteur de recommandation, une file de traitement ou un algorithme d'affectation. Une IA utile n'est pas une boîte noire, c'est une décision que l'on peut expliquer et auditer.

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