Salvo · Nahrung für den Geist
Hinter dem einfachen Akt, auf Felder zu klicken, verbirgt sich eine deterministische Engine, die verborgene Flotten, wahrscheinlichkeitsgewichtetes Schließen und das klassische Duell aus Verbergen und Entdecken modelliert. 3
Auf Englisch verfasst und redigiert. Diese deutsche Fassung wurde maschinell übersetzt; wo es auf Genauigkeit ankommt, ist das englische Original maßgeblich. Das englische Original lesen →
Im Herzen des Spiels sitzt ein Paar von Board-Objekten, eines für Ihre verborgene Aufstellung und das andere für die verborgene Aufstellung des Gegners. Jedes Brett trägt eine Flotte von Schiffen, die auf einem linierten Raster platziert sind, doch die Positionen bleiben der anderen Seite verborgen. Sie feuern auf das gegnerische Raster, während die KI auf Ihres feuert, und jeder Schuss trifft entweder ein Schiff oder landet im leeren Wasser. Diese Architektur mit zwei Brettern begründet die fundamentale Informationsasymmetrie des Duells der verborgenen Flotten: Jede Seite kennt ihr eigenes Brett vollständig, kann die Konfiguration der anderen aber nur aus dem Muster ihrer Schüsse erschließen. 3
Die Symmetrie dieses Aufbaus verleiht dem Spiel seinen Charakter. Keine Seite sieht die Schiffe der anderen direkt. Stattdessen müssen beide Seiten aus dem spärlichen Feedback von Treffern und Fehlschüssen ein mentales Modell des verborgenen Rasters konstruieren. Jeder Schuss wird zu Daten, jeder Treffer engt die Möglichkeiten ein und jeder Fehlschuss streicht Gebiet aus der Betrachtung. Der Spielkoordinator der Engine verwaltet diese beiden Bretter und stellt sicher, dass Schüsse aufgezeichnet werden, dass Treffer korrekt zugeordnet werden und dass das Spiel erst endet, wenn die gesamte Flotte einer Seite versenkt wurde. 3
Bevor das Spiel beginnt, ruft die Engine randomFleet auf, um die Schiffe der KI zufällig anzuordnen. Diese Zufälligkeit ist nicht willkürlich; sie ist mit einem Seed versehen, was bedeutet, dass ein gegebener Seed-Wert immer dasselbe Layout erzeugt. Dieser Seed-Determinismus ist eine Designentscheidung, die das Spiel reproduzierbar und testbar macht. Wenn Sie das Spiel mit demselben Seed ausführen, erhalten Sie dieselben Schiffsplatzierungen, dieselbe Abfolge von KI-Entscheidungen und dasselbe Ergebnis. Diese Eigenschaft ist wertvoll für das Debugging und für das Verständnis, wie sich die KI unter verschiedenen Bedingungen verhält. 3
Sobald die Flotte platziert ist, sind die Regeln, die das Spielgeschehen bestimmen, fest und deterministisch. Die KI würfelt nicht, und die Engine führt mitten im Spiel keine Zufälligkeit ein. Jede Entscheidung, die die KI trifft, folgt aus dem Wahrscheinlichkeitsmodell, das sie unterhält, und jeder Schuss, den Sie abfeuern, wird aufgezeichnet und analysiert. Die einzige Quelle der Variation ist der Seed, der die anfängliche Flottenplatzierung bestimmt. Das bedeutet, dass das Spiel letztlich ein Rätsel ist: Können Sie unter den Einschränkungen der Regeln und anhand des Feedbacks aus den Schüssen die verborgene Konfiguration erschließen, bevor die KI Ihre erschließt? 3
Wenn Sie einen Schuss abfeuern, zeichnet die Engine ihn auf dem Zielbrett auf und prüft, ob der Schuss getroffen oder verfehlt hat. Dies geschieht über die Funktion fire, die den Zustand des Bretts aktualisiert und das Ergebnis bestimmt. Ein Treffer markiert das Feld als von einem Schiff besetzt, während ein Fehlschuss es als leeres Wasser markiert. Die Engine prüft dann, ob das Schiff, zu dem dieses Feld gehört, vollständig versenkt wurde, indem sie alle seine Felder untersucht. Wenn alle Felder eines Schiffes getroffen wurden, ist das Schiff versenkt, und diese Information wird beiden Seiten mitgeteilt. 3
Die Siegbedingung ist einfach, aber folgenreich. Eine Seite gewinnt, wenn alle Schiffe des Gegners versenkt sind. Dies wird über die Funktion allSunk geprüft, die untersucht, ob jedes Schiff auf dem Brett des Gegners vollständig getroffen wurde. Das Spiel endet sofort, wenn diese Bedingung erfüllt ist. Dieser Alles-oder-nichts-Charakter der Siegbedingung bedeutet, dass jeder Schuss zählt und dass der Druck, Schiffe schnell zu versenken, gegen die Notwendigkeit abgewogen wird, die eigene Konfiguration nicht preiszugeben. 3
Der Gegner in diesem Spiel ist kein einfacher Zufallsschütze. Er ist eine KI, die ihre Ziele nach Wahrscheinlichkeit wählt und abwägt, wie wahrscheinlich es ist, dass jedes verborgene Feld ein Schiff enthält. Die KI unterhält ein Wahrscheinlichkeitsmodell des gegnerischen Rasters und aktualisiert es, während Schüsse abgefeuert werden und Feedback eintrifft. Felder, die aufgrund der Platzierungsbeschränkungen der verbleibenden Schiffe keine Schiffe enthalten können, werden als unwahrscheinlich markiert, während Felder, die Schiffe enthalten müssen, um die verbleibenden Platzierungen unterzubringen, als wahrscheinlich markiert werden. Die KI feuert dann auf das Feld mit der höchsten Wahrscheinlichkeit und verwandelt blindes Raten in eine informierte Suche. 3
Dieses Wahrscheinlichkeitsmodell gründet auf der Mathematik der Wahrscheinlichkeit, in der Ereignisse durch Zahlen zwischen null und eins beschrieben werden 2. Eine Wahrscheinlichkeit von null bedeutet, dass ein Ereignis nicht eintreten kann, während eine Wahrscheinlichkeit von eins bedeutet, dass es eintreten muss. Die KI nutzt diese numerischen Beschreibungen, um ihre Schüsse zu lenken, und bevorzugt Felder, an denen die Wahrscheinlichkeit, ein Schiff zu finden, am höchsten ist. Dieser Ansatz ist es, der die KI von einem rein zufälligen Schützen unterscheidet und der KI ihr charakteristisches Jagdverhalten verleiht.
Das Verhalten der KI lässt sich in zwei Phasen beschreiben: Jagen und Zielen. In der Jagdphase sucht die KI nach Schiffen, indem sie auf Felder feuert, an denen unentdeckte Schiffe am wahrscheinlichsten liegen. Dies ist eine breite Suche, die darauf abzielt, den ersten Kontakt mit feindlichen Schiffen herzustellen. Sobald ein Treffer registriert wird, wechselt die KI in die Zielphase, in der sie sich auf die Nachbarfelder des Treffers konzentriert, um dieses Schiff vollends zu versenken. Dieser zweiphasige Ansatz spiegelt wider, wie menschliche Spieler das Spiel angehen: zuerst die Schiffe finden, dann versenken. 3
Der Übergang zwischen Jagen und Zielen wird davon bestimmt, ob der letzte Schuss ein Treffer oder ein Fehlschuss war. Ging der letzte Schuss daneben, kehrt die KI in den Jagdmodus zurück und sucht nach Feldern mit der höchsten Wahrscheinlichkeit. Hat der letzte Schuss getroffen, wechselt die KI in den Zielmodus und feuert auf die Nachbarfelder des Treffers. Diese einfache Regel, kombiniert mit dem Wahrscheinlichkeitsmodell, ergibt eine kohärente Strategie, die Exploration und Exploitation ausbalanciert. Die KI erkundet das Raster, um Schiffe zu finden, und nutzt ihr Wissen über einen Treffer aus, um dieses Schiff effizient zu versenken. 3
Die KI verfügt über drei Spielstärken als Schwierigkeitsgrade, die ihr Verhalten abstimmen. Diese Spielstärken beeinflussen, wie die KI Wahrscheinlichkeiten gewichtet und Entscheidungen trifft. Bei niedrigeren Spielstärken macht die KI womöglich mehr Fehler oder wählt ihre Ziele weniger aggressiv. Bei höheren Spielstärken ist die KI in ihren Wahrscheinlichkeitsberechnungen konsistenter und in ihrer Zielwahl gnadenloser. Diese Bandbreite an Spielstärken ermöglicht es Spielern, ein Herausforderungsniveau zu finden, das zu ihnen passt, vom lockeren Spiel bis zum ernsthaften Wettkampf.
Die genaue Implementierung dieser Spielstärken findet sich in der KI-Komponente der Engine, der Klasse SalvoAI. Die Schwierigkeitsgrade verändern, wie die KI das Wahrscheinlichkeitsmodell interpretiert und wie sie Exploration und Exploitation gegeneinander abwägt. Dieses Design ermöglicht es der KI, sowohl für Gelegenheitsspieler zugänglich als auch für erfahrene Spieler herausfordernd zu sein, ohne die grundlegenden Mechaniken des Spiels zu verändern. 3
Auf die klassischen Regeln setzt ein Kniff auf: der Sonar-Ping. Diese Fähigkeit erlaubt es einer Seite, eine 3×3-Abtastung des gegnerischen Rasters aufzudecken, zum Preis des Schusses in diesem Zug. Der Sonar-Ping enthüllt, ob jedes Feld im 3×3-Bereich ein Schiff enthält oder leeres Wasser ist. Diese Information kann von unschätzbarem Wert sein, um die Lage von Schiffen einzugrenzen, hat aber ihren Preis: Sie verlieren Ihren Schuss für diesen Zug. 3
Die Entscheidung, den Sonar-Ping zu nutzen, ist eine strategische. Wann ist die Information den Preis wert? Wenn Sie Mühe haben, Schiffe zu finden, kann der Sonar-Ping den Durchbruch liefern, den Sie brauchen. Wenn Sie kurz davor sind, ein Schiff zu versenken, könnte der Preis, den Schuss zu verlieren, zu hoch sein. Der Sonar-Ping fügt dem Spiel eine Ebene des Ressourcenmanagements hinzu und zwingt Spieler, den Wert der Information gegen den Wert der Handlung abzuwägen. 3
Eine weitere Abwandlung der klassischen Regeln ist das einmalige Versetzen pro Spiel. Jede Seite darf während des Spiels einmal eines ihrer eigenen Schiffe versetzen. Dieses defensive Ausweichmanöver kostet keinen Zug, was bedeutet, dass Sie versetzen und in Ihrem Zug trotzdem einen Schuss abfeuern können. Die Möglichkeit zu versetzen erlaubt es Ihnen, ein Schiff aus der Gefahr zu bewegen, wenn es bedroht ist, oder es an eine besser zu verteidigende Position zu verlegen. 3
Die Möglichkeit zu versetzen ist eine einmalige Option, was sie kostbar macht. Wann sollten Sie sie einsetzen? Wenn ein Schiff kurz davor ist, versenkt zu werden, kann das Versetzen es retten. Wenn Sie sich Ihrer aktuellen Aufstellung sicher sind, wäre das Versetzen womöglich Verschwendung. Die Entscheidung zu versetzen ist eine strategische, die eine sorgfältige Abwägung der aktuellen Spielsituation und der wahrscheinlichen Aktionen Ihres Gegners erfordert. 3
Allen diesen Mechaniken liegt die klassische Regel eines Schusses pro Zug zugrunde. Jede Seite feuert genau einen Schuss pro Zug ab, abwechselnd hin und her. Diese Regel bestimmt den Rhythmus des Spiels und stellt sicher, dass beide Seiten die gleiche Gelegenheit zu handeln haben. Die Regel eines Schusses pro Zug ist es, die das Spiel zu einem Duell der Köpfe und nicht zu einem Wettlauf um Geschwindigkeit macht. 3
Diese klassische Regel verankert das Spiel in der Tradition von „Schiffe versenken", einem strategischen Ratespiel für zwei Spieler, das auf karierten Rastern gespielt wird, wobei die Flotte jedes Spielers vor dem Gegner verborgen bleibt 1. Die Regel eines Schusses pro Zug macht das Spiel zu einer Prüfung von Deduktion und Wahrscheinlichkeit und nicht zu einer Prüfung der Reflexe. Es ist eine einfache Regel, aber eine, die dem Spiel seinen Charakter und seine Herausforderung verleiht.
Die Engine ist rein und Seed-deterministisch, angetrieben von ihrem eigenen Zufallszahlengenerator mit Seed. Das bedeutet, dass jeder Aspekt des Spiels durch den Seed-Wert bestimmt wird, der zu Beginn übergeben wird. Bei gleichem Seed erzeugt das Spiel immer dieselbe Abfolge von Ereignissen, von der anfänglichen Flottenplatzierung bis zum letzten Schuss. Diese Eigenschaft macht das Spiel testbar, da dasselbe Szenario reproduziert und untersucht werden kann. 3
Der Seed-Determinismus hat auch Auswirkungen auf das Verständnis des Spiels. Wenn Sie verstehen möchten, wie sich die KI in einem bestimmten Szenario verhält, können Sie das Spiel mit einem spezifischen Seed ausführen und das Ergebnis beobachten. Wenn Sie eine bestimmte Strategie testen möchten, können Sie das Spiel mehrmals mit demselben Seed ausführen und sehen, wie sie sich schlägt. Diese Reproduzierbarkeit ist eine wertvolle Eigenschaft für Spieler wie Entwickler gleichermaßen.
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.