PlayPendium

Salvo · Пища для размышлений

Внутри Salvo

За простыми щелчками по клеткам скрывается детерминированный движок, который моделирует спрятанные флоты, рассуждения с учётом вероятностей и классический поединок маскировки и поиска. 3

Написано и отредактировано на английском языке. Эта русская версия создана машинным переводом; там, где важна точность, авторитетным остаётся английский оригинал. Читать оригинал на английском →

Два поля

В основе игры лежит пара полей: одно представляет вашу скрытую позицию, другое — скрытую позицию соперника. На каждом поле стоит флот кораблей, расставленных на расчерченной сетке, но их положение скрыто от другой стороны. Вы стреляете по сетке противника, ИИ — по вашей, и каждый выстрел либо попадает в корабль, либо уходит в пустую воду. Такая архитектура с двумя полями задаёт фундаментальную информационную асимметрию поединка скрытых флотов: каждая сторона полностью знает своё поле, но о расстановке соперника может лишь догадываться по картине собственных выстрелов. 3

Именно симметрия этой схемы придаёт игре её характер. Ни одна сторона не видит кораблей другой напрямую. Вместо этого обеим приходится строить мысленную модель скрытой сетки по скупым сигналам попаданий и промахов. Каждый выстрел становится данными, каждое попадание сужает круг возможностей, а каждый промах исключает часть территории из рассмотрения. Игровой координатор движка управляет обоими полями: следит, чтобы выстрелы записывались, попадания засчитывались правильно, а партия заканчивалась лишь тогда, когда потоплен весь флот одной из сторон. 3

Детерминированная модель превращает слепое угадывание в осмысленный поиск.

Случайная расстановка, детерминированные правила

Перед началом игры движок расставляет корабли ИИ случайным образом. Эта случайность не произвольна: она задаётся начальным значением (seed), а значит, одно и то же значение всегда даёт одну и ту же расстановку. Такой детерминизм — сознательное проектное решение, благодаря которому игру можно воспроизводить и тестировать. Запустив игру с тем же seed, вы получите ту же расстановку кораблей, ту же последовательность решений ИИ и — если сделаете те же ходы — тот же исход. Это свойство ценно для отладки и для понимания того, как ИИ ведёт себя в разных условиях. 3

Когда флот расставлен, правила игры фиксированы и детерминированы. Там, где ИИ всё-таки выбирает случайно — разрешая ничью между одинаково хорошими клетками или решая, провести ли разведку сонаром, — он берёт значения из того же генератора с начальным значением, так что ничего не остаётся на волю внешнего случая. Каждое решение ИИ вытекает из вероятностной модели, которую он поддерживает, а каждый ваш выстрел записывается и анализируется. Помимо ваших собственных решений, единственный источник разнообразия — seed, определяющий начальную расстановку флота. Значит, в конечном счёте игра — это головоломка: сумеете ли вы, опираясь на правила и отклик на выстрелы, вычислить скрытую расстановку раньше, чем ИИ вычислит вашу? 3

Выстрел

Когда вы стреляете, движок отмечает выстрел на целевом поле и проверяет, попадание это или промах. Этим занимается один шаг движка: он обновляет состояние поля и определяет результат. Попадание помечает клетку как занятую кораблём, промах — как пустую воду. Затем движок проверяет, потоплен ли корабль, которому принадлежит эта клетка, перебирая все его клетки. Если поражены все клетки корабля, он потоплен, и об этом сообщается обеим сторонам. 3

Условие победы простое, но весомое. Сторона побеждает, когда потоплены все корабли соперника. Движок проверяет это, смотря, поражён ли полностью каждый корабль на поле противника. Как только условие выполнено, игра сразу заканчивается. Поскольку победа достаётся по принципу «всё или ничего», важен каждый выстрел. А то, что каждая сторона выдаёт сопернику, задано правилами: о каждом потоплении объявляется вместе с названием ушедшего на дно корабля, так что другая сторона точно знает, какие корпуса ещё на плаву, а раненый корабль, ускользнувший благодаря перестановке, доступной раз за партию, оставляет след: попадания в его прежние клетки снова превращаются в обычные промахи. 3

ИИ ищет по вероятности и добивает прицельно.

Вероятностный движок

Соперник в этой игре — не просто стрелок наугад. Это ИИ с вероятностным наведением, который оценивает, насколько вероятно, что в каждой скрытой клетке стоит корабль. ИИ поддерживает вероятностную модель сетки противника и обновляет её по мере выстрелов и полученных откликов. Клетки, где корабля быть не может из-за ограничений на размещение оставшихся кораблей, помечаются как маловероятные, а клетки, которые обязательно должны быть заняты, чтобы оставшиеся корабли поместились, — как вероятные. Затем ИИ стреляет в клетку с наибольшей вероятностью, превращая слепое угадывание в осмысленный поиск. 3

Эта вероятностная модель опирается на математику правдоподобия, где события описываются числами от нуля до единицы 2. Вероятность, равная нулю, означает, что событие произойти не может, а вероятность, равная единице, — что оно обязательно произойдёт. ИИ использует эти числовые описания, чтобы направлять выстрелы, отдавая предпочтение клеткам, где шанс найти корабль выше всего. Именно этот подход отличает ИИ от чисто случайного стрелка и придаёт ему характерную охотничью манеру.

Поиск и добивание

Поведение ИИ можно описать двумя фазами: поиск и добивание. В фазе поиска ИИ ищет корабли, стреляя в клетки, где ещё не обнаруженные корабли вероятнее всего стоят. Это широкий поиск, цель которого — первый контакт с кораблями противника. Как только засчитано попадание, ИИ переходит в фазу добивания и сосредотачивается на соседних клетках, чтобы потопить этот корабль. Такой двухфазный подход повторяет то, как играют люди: сначала найти корабли, потом их потопить. 3

Переход между поиском и добиванием зависит от того, был ли последний выстрел попаданием или промахом. Если последний выстрел прошёл мимо, ИИ возвращается в режим поиска и ищет клетки с наибольшей вероятностью. Если он попал, ИИ переходит в режим добивания и стреляет по клеткам, соседним с попаданием. Это простое правило вместе с вероятностной моделью образует связную стратегию, уравновешивающую исследование и использование. ИИ исследует сетку, чтобы найти корабли, и использует знание о попадании, чтобы эффективно потопить корабль. 3

Три уровня сложности настраивают поведение ИИ.

Три уровня силы

У ИИ три уровня сложности, которые настраивают его поведение. Они влияют на то, как ИИ взвешивает вероятности и принимает решения. На низких уровнях ИИ может чаще ошибаться или менее напористо добивать цели. На высоких он последовательнее в вероятностных расчётах и беспощаднее в добивании. Такое разнообразие позволяет игрокам подобрать подходящий уровень сложности — от непринуждённой игры до серьёзного соперничества.

Конкретная реализация этих уровней находится в ИИ-компоненте движка. Уровни сложности меняют то, как ИИ интерпретирует вероятностную модель и как соотносит исследование с использованием. Благодаря этому ИИ может быть доступен новичкам и труден для опытных игроков, не меняя базовой механики игры. 3

Гидролокатор

Поверх классических правил есть особый ход — импульс гидролокатора. Он позволяет стороне открыть участок сетки противника размером 3×3 ценой выстрела в этом ходу. Импульс показывает для каждой клетки области 3×3, стоит ли в ней корабль или это пустая вода. Такие сведения могут оказаться бесценными для поиска кораблей, но платить за них приходится потерей выстрела в этом ходу. 3

Решение применить гидролокатор — стратегическое. Когда информация стоит своей цены? Если вам никак не удаётся найти корабли, импульс может дать нужный прорыв. Если вы близки к тому, чтобы потопить корабль, потеря выстрела может обойтись слишком дорого. Гидролокатор добавляет в игру элемент управления ресурсами, заставляя игроков соизмерять ценность информации с ценностью действия. 3

Перестановка — разовая защитная возможность.

Перестановка раз за игру

Ещё одно отступление от классических правил — перестановка, доступная один раз за игру. Каждая сторона может однажды за партию переместить один из своих кораблей. Этот защитный манёвр не стоит хода: вы можете переставить корабль и всё равно выстрелить в свой ход. Перестановка позволяет увести корабль из-под удара или перевести его на более защищённую позицию. 3

Перестановка доступна лишь один раз, и потому драгоценна. Когда ею воспользоваться? Если корабль вот-вот потопят, перестановка может его спасти. Если вы уверены в своей нынешней позиции, она, возможно, будет потрачена впустую. Решение о перестановке — стратегическое, оно требует тщательно взвесить текущее положение в партии и вероятные действия соперника. 3

Один выстрел за ход

В основе всех этих механик лежит классическое правило: один выстрел за ход. Каждая сторона делает ровно один выстрел, и стороны ходят по очереди. Это правило задаёт ритм игры и гарантирует обеим сторонам равные возможности действовать. Именно правило одного выстрела за ход делает игру поединком умов, а не гонкой на скорость. 3

Это классическое правило укореняет игру в традиции «Морского боя» (Battleship) — стратегической игры на угадывание для двух игроков на расчерченных сетках, где флот каждого игрока скрыт от соперника 1. Правило одного выстрела за ход делает игру проверкой дедукции и вероятностного мышления, а не реакции. Правило простое, но именно оно придаёт игре её характер и её сложность.

Чистый детерминизм делает игру тестируемой.

Детерминизм с начальным значением

Движок чист и детерминирован: им управляет собственный генератор псевдослучайных чисел с начальным значением (seed). Это значит, что каждый аспект игры определяется значением seed, заданным в начале. При одном и том же seed игра всегда порождает одну и ту же последовательность событий — от начальной расстановки флота до последнего выстрела. Это свойство делает игру тестируемой: один и тот же сценарий можно воспроизвести и изучить. 3

Детерминизм с начальным значением помогает и понимать игру. Если вы хотите разобраться, как ИИ ведёт себя в определённой ситуации, можно запустить игру с конкретным seed и посмотреть на результат. Если хотите проверить определённую стратегию, можно сыграть несколько раз с одним и тем же seed и увидеть, как она работает. Такая воспроизводимость ценна и для игроков, и для разработчиков.

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), each shot is recorded as a hit or miss, and a side wins when the opponent's ships are all sunk; the opponent is a probability-targeting AI 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?
Play Salvo
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026