PlayPendium

Salvo · Matière à réflexion

Dans les rouages de Salvo

Sous le geste tout simple qui consiste à cliquer sur des cases se cache un moteur déterministe qui modélise des flottes dissimulées, un raisonnement pondéré par les probabilités et le duel classique entre la dissimulation et la découverte. 3

Rédigé et édité en anglais. Cette version française a été produite par traduction automatique ; en cas de doute sur un point précis, l'original anglais fait foi. Lire l'original en anglais →

Les deux plateaux

Au cœur du jeu se trouve une paire d'objets Board, l'un représentant votre position cachée et l'autre celle de l'adversaire. Chaque plateau porte une flotte de navires posés sur une grille quadrillée, mais les emplacements restent dissimulés à l'autre camp. Vous tirez sur la grille ennemie pendant que l'IA tire sur la vôtre, et chaque tir touche un navire ou tombe à l'eau. Cette architecture à deux plateaux instaure l'asymétrie d'information fondamentale du duel à flottes cachées : chaque camp connaît entièrement son propre plateau, mais ne peut déduire la configuration de l'autre que du motif de ses tirs. 3

C'est la symétrie de ce dispositif qui donne au jeu son caractère. Aucun camp ne voit directement les navires de l'autre. Les deux doivent au contraire se construire un modèle mental de la grille cachée à partir du maigre retour que constituent les touches et les tirs manqués. Chaque tir devient une donnée, chaque touche réduit les possibilités et chaque tir manqué retire du territoire du champ des hypothèses. Le coordinateur de partie du moteur gère ces deux plateaux : il veille à ce que les tirs soient enregistrés, à ce que les touches soient correctement attribuées et à ce que la partie ne s'achève que lorsque toute la flotte d'un camp a été coulée. 3

Un modèle déterministe transforme la devinette aveugle en recherche éclairée.

Disposition aléatoire, règles déterministes

Avant le début de la partie, le moteur appelle randomFleet pour disposer les navires de l'IA de façon aléatoire. Cet aléa n'est pas arbitraire : il part d'une graine, ce qui signifie qu'une valeur de graine donnée produira toujours la même disposition. Ce déterminisme fondé sur une graine est un choix de conception qui rend le jeu reproductible et testable. Si vous lancez la partie avec la même graine, vous obtiendrez les mêmes placements de navires, la même suite de décisions de l'IA et le même résultat. Cette propriété est précieuse pour le débogage comme pour comprendre le comportement de l'IA dans différentes conditions. 3

Une fois la flotte disposée, les règles qui régissent la partie sont fixes et déterministes. L'IA ne lance pas de dés et le moteur n'introduit aucun aléa en cours de partie. Chaque décision de l'IA découle du modèle de probabilité qu'elle tient à jour, et chaque tir que vous effectuez est enregistré et analysé. La seule source de variation est la graine qui détermine le placement initial de la flotte. La partie est donc, au fond, un casse-tête : compte tenu des contraintes des règles et du retour fourni par les tirs, saurez-vous déduire la configuration cachée avant que l'IA ne déduise la vôtre ? 3

Le déclenchement du tir

Lorsque vous tirez, le moteur enregistre le tir sur le plateau visé et vérifie s'il a touché ou manqué. Cela passe par la fonction fire, qui met à jour l'état du plateau et détermine l'issue. Une touche marque la case comme occupée par un navire, un tir manqué la marque comme eau libre. Le moteur vérifie ensuite si le navire auquel appartient cette case a été entièrement coulé, en examinant toutes ses cases. Si toutes les cases d'un navire ont été touchées, le navire est coulé et l'information est communiquée aux deux camps. 3

La condition de victoire est simple mais lourde de conséquences. Un camp l'emporte lorsque tous les navires de l'adversaire sont coulés. Cela se vérifie par la fonction allSunk, qui examine si chaque navire du plateau adverse a été entièrement touché. La partie s'arrête dès que cette condition est remplie. Ce caractère tout ou rien de la condition de victoire fait que chaque tir compte et que la pression de couler vite se met en balance avec la nécessité de ne pas trahir votre propre configuration. 3

L'IA chasse à la probabilité et conclut par le ciblage.

Le moteur de probabilité

L'adversaire de ce jeu n'est pas un simple tireur aléatoire. C'est une IA de ciblage probabiliste qui évalue la probabilité que chaque case cachée abrite un navire. Elle tient un modèle de probabilité de la grille ennemie et le met à jour à mesure que les tirs partent et que les retours arrivent. Les cases qui ne peuvent pas contenir de navire, du fait des contraintes de placement des navires restants, sont marquées comme peu probables, tandis que celles qui doivent en contenir pour que les placements restants tiennent sont marquées comme probables. L'IA tire alors sur la case de plus forte probabilité, transformant la devinette aveugle en recherche informée. 3

Ce modèle de probabilité repose sur les mathématiques de la vraisemblance, où les événements sont décrits par des nombres compris entre zéro et un 2. Une probabilité de zéro signifie qu'un événement ne peut pas se produire, une probabilité de un qu'il doit se produire. L'IA se sert de ces descriptions numériques pour guider ses tirs, en privilégiant les cases où la probabilité de trouver un navire est la plus forte. C'est cette approche qui distingue l'IA d'un tireur purement aléatoire et lui donne son comportement de chasse caractéristique.

Chasse et ciblage

Le comportement de l'IA se décrit en deux phases : la chasse et le ciblage. Pendant la phase de chasse, l'IA cherche les navires en tirant sur les cases où les navires non découverts ont le plus de chances de se trouver. C'est une recherche large, qui vise à établir le premier contact avec les navires ennemis. Dès qu'une touche est enregistrée, l'IA passe à la phase de ciblage, où elle se concentre sur les cases voisines de la touche pour achever de couler ce navire. Cette approche en deux temps reproduit la façon dont les joueurs humains abordent le jeu : trouver d'abord les navires, les couler ensuite. 3

Le passage de la chasse au ciblage dépend de ce qu'a donné le dernier tir : une touche ou un tir manqué. Si le dernier tir a manqué, l'IA revient en mode chasse et cherche les cases de plus forte probabilité. S'il a touché, elle entre en mode ciblage et tire sur les cases voisines de la touche. Cette règle simple, associée au modèle de probabilité, produit une stratégie cohérente qui équilibre exploration et exploitation. L'IA explore la grille pour trouver les navires et exploite ce qu'une touche lui apprend pour couler ce navire efficacement. 3

Trois niveaux de difficulté règlent le comportement de l'IA.

Trois niveaux de force

L'IA dispose de trois niveaux de force qui règlent son comportement. Ces niveaux modifient la manière dont elle pondère les probabilités et prend ses décisions. Aux niveaux les plus bas, elle peut commettre davantage d'erreurs ou se montrer moins agressive dans son ciblage. Aux niveaux les plus élevés, elle est plus régulière dans ses calculs de probabilité et plus impitoyable dans son ciblage. Cette gamme de niveaux permet à chacun de trouver un degré de défi qui lui convient, de la partie tranquille à la compétition sérieuse.

L'implémentation exacte de ces niveaux se trouve dans le composant IA du moteur, la classe SalvoAI. Les niveaux de difficulté modifient la façon dont l'IA interprète le modèle de probabilité et dont elle arbitre entre exploration et exploitation. Cette conception rend l'IA à la fois accessible aux joueurs occasionnels et exigeante pour les joueurs chevronnés, sans rien changer aux mécanismes fondamentaux du jeu. 3

Le ping sonar

Au-dessus des règles classiques vient se greffer une touche d'originalité : le ping sonar. Cette capacité permet à un camp de révéler un relevé 3×3 de la grille ennemie, au prix du tir de ce tour. Le ping sonar indique, pour chaque case de la zone 3×3, si elle abrite un navire ou de l'eau libre. Ce renseignement peut être inestimable pour resserrer la localisation des navires, mais il se paie par la perte de votre tir pour ce tour. 3

Décider d'employer le ping sonar est un choix stratégique. Quand le renseignement vaut-il son prix ? Si vous peinez à trouver les navires, le ping sonar peut vous apporter la percée qu'il vous faut. Si vous êtes sur le point de couler un navire, perdre votre tir coûte peut-être trop cher. Le ping sonar ajoute au jeu une couche de gestion de ressources, obligeant le joueur à mettre en balance la valeur du renseignement et celle de l'action. 3

Le repositionnement est une option défensive utilisable une seule fois.

Le repositionnement, une fois par partie

Un autre ajout aux règles classiques est le repositionnement, utilisable une fois par partie. Chaque camp peut déplacer un de ses propres navires une seule fois dans la partie. Cette esquive défensive ne coûte pas de tour : vous pouvez repositionner et tirer quand même pendant votre tour. Le repositionnement permet de mettre un navire hors de danger lorsqu'il est menacé, ou de le porter vers un emplacement plus facile à défendre. 3

Le repositionnement ne s'emploie qu'une fois, ce qui le rend précieux. Quand faut-il s'en servir ? Si un navire est sur le point d'être coulé, le repositionner peut le sauver. Si vous avez confiance dans votre position actuelle, le repositionner serait du gaspillage. C'est un choix stratégique, qui demande de bien peser l'état de la partie et les actions probables de l'adversaire. 3

Un tir par tour

Sous tous ces mécanismes court la règle classique d'un tir par tour. Chaque camp tire exactement une fois par tour, à tour de rôle. Cette règle installe le rythme de la partie et garantit aux deux camps la même occasion d'agir. C'est elle qui fait du jeu un duel d'intelligence plutôt qu'une course de vitesse. 3

C'est cette règle classique qui ancre le jeu dans la tradition de la bataille navale, un jeu de devinettes stratégique pour deux joueurs qui se joue sur des grilles quadrillées et où la flotte de chaque joueur reste dissimulée à l'adversaire 1. La règle d'un tir par tour fait du jeu une épreuve de déduction et de probabilité plutôt qu'une épreuve de réflexes. C'est une règle simple, mais c'est elle qui donne au jeu son caractère et sa difficulté.

Le déterminisme pur rend le jeu testable.

Le déterminisme par graine

Le moteur est pur et déterministe à partir d'une graine, piloté par son propre générateur de nombres aléatoires à graine. Autrement dit, chaque aspect de la partie est déterminé par la valeur de graine fournie au départ. À graine identique, le jeu produira toujours la même suite d'événements, du placement initial de la flotte jusqu'au dernier tir. Cette propriété rend le jeu testable, puisqu'on peut reproduire et examiner le même scénario. 3

Le déterminisme par graine a aussi des conséquences pour la compréhension du jeu. Si vous voulez comprendre comment l'IA se comporte dans un scénario donné, vous pouvez lancer la partie avec une graine précise et observer le résultat. Si vous voulez éprouver une stratégie, vous pouvez relancer plusieurs fois la partie avec la même graine et voir ce qu'elle donne. Cette reproductibilité est un atout précieux, pour les joueurs comme pour les développeurs.

Sources & notes

  1. "Battleship (game)," Wikipedia, a strategy-type guessing game for two players, played on ruled grids on which each player's fleet of warships is marked and concealed from the opponent; players alternate calling shots at the other's grid to hit and sink ships, aiming to sink the entire fleet; the game evolved from a pencil-and-paper game dating to around the World War I era; the first commercial version was called Salvo, published by the Starex company in 1931, and in 1967 Milton Bradley published a version using plastic pegboards and miniature ships; and in the "salvo" variant a specified number of squares are targeted at one time, all attacked simultaneously. en.wikipedia.org/wiki/Battleship_(game).
  2. "Probability," Wikipedia, a branch of mathematics concerning numerical descriptions of how likely events are to occur; the probability of an event is a number between 0 and 1, where 0 indicates impossibility and 1 indicates certainty, and the larger the probability the more likely the event (for example, a fair coin flip has probability 0.5 for each outcome). en.wikipedia.org/wiki/Probability.
  3. This game's engine: a Battleship game where each side has a Board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), fire records a hit or miss, and a side wins when the opponent's ships are all sunk (allSunk); the opponent is a probability-targeting SalvoAI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.
  4. Further reading on Probability, Interpretations of Probability (Stanford Encyclopedia of Philosophy/Winter 2012 Edition). plato.stanford.edu.
  5. Further reading on Probability, Probability -- from Wolfram MathWorld. mathworld.wolfram.com.
  6. Further reading on Probability, Logical foundations and measurement of subjective probability. doi.org.
Was this worth reading?
← Back to Salvo
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Inspirations · © 2026