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


Правила игры
Вариантов морского боя много, но мы рассмотрим самый распространенный вариант со следующим набором кораблей:
Все перечисленные корабли должны быть размещены в квадратном пространстве 10 на 10, и корабли не должны касаться друг друга ни под каким углом или стороной. Само игровое поле пронумеровано сверху вниз, а фигуры обозначены русскими буквами от «А» до «К» (буквы «Y» и «Y» опущены).
Рядом с ним рисуется поле противника аналогичного размера. При удачном выстреле по кораблю противника в соответствующем квадрате вражеского поля ставится крест и производится повторный выстрел; если выстрел неудачный, в соответствующем квадрате ставится точка и ход переходит к противнику.
Оптимальная стратегия
В Battleship всегда есть элемент случайности, но его можно свести к минимуму. Прежде чем мы приступим к поиску оптимальной стратегии, следует констатировать одну очевидную вещь: чем выше вероятность поражения вражеского корабля, тем меньше незащищенных клеток остается на его поле; аналогично, чем ниже вероятность поражения ваших кораблей, тем больше незащищенных ячеек остается в вашем пространстве. Итак, чтобы эффективно играть, вам нужно научиться одновременно двум вещам: оптимальной стрельбе по противнику и оптимальной расстановке ваших кораблей.
В пояснении ниже будут использоваться следующие термины:
Оптимальная стрельба
Первым и наиболее очевидным правилом оптимального огня является следующее правило: не стреляйте в квадраты, непосредственно окружающие уничтоженный вражеский корабль.
На приведенной ниже диаграмме показаны желтые квадраты, в которые стреляли неудачно, красные квадраты, в которые стреляли, и зеленые квадраты, в которые не стреляли, но по которым можно гарантировать, что там нет кораблей (кораблей там быть не может, потому что правила гласят, что корабли не должны касаться друг друга).
Первое правило ведет ко второму: если вам удалось заполучить вражеский корабль, вы должны закончить его как можно быстрее, чтобы получить гарантированно пустой список.
Третье правило вытекает из первых двух: сначала нужно попытаться уничтожить самые большие вражеские корабли. Для вас это может быть неочевидно, но если вы задумаетесь, то легко заметите, что уничтожение вражеского линкора даст в лучшем случае 14 гарантированных вакансий, а уничтожение крейсера принесет вам только 12 дополнительных.
Таким образом, оптимальная стратегия стрельбы может быть сведена к нацеливанию и уничтожению самых крупных кораблей противника. К сожалению, сформулировать стратегию недостаточно, нужно предложить способ ее реализации.
Для начала рассмотрим срез игрового поля размером 4 на 4 клетки. При наличии вражеского линкора в заданном районе он гарантированно поразит не более 4 выстрелов. Для этого нужно стрелять так, чтобы на каждой горизонтальной и вертикальной линии было ровно по одному отмеченному квадрату. ниже все варианты такой съемки (без учета отражений и вращений).


Среди этих вариантов оптимальными на поле 10х10 являются только первые два, гарантирующие попадание линкора максимум за 24 хода.
Уничтожив вражеский линкор, вы должны начать искать крейсера, а затем эсминцы. Делая это, как вы уже поняли, вы можете использовать подобную технику. Только теперь вам предстоит разделить поле на квадраты со сторонами в 3 и 2 квадрата соответственно.
Если при поиске линкора вы использовали вторую стратегию, то для поиска крейсеров и эсминцев вам придется стрелять по следующим квадратам (зеленые квадраты — это те, в которые вы уже стреляли при поиске линкора):
Оптимальной стратегии поиска канонерских лодок не существует, поэтому в конце игры приходится полагаться в основном на удачу.
Оптимальное размещение кораблей
Стратегия оптимального размещения кораблей в некотором смысле противоположна стратегии оптимальной стрельбы. Во время стрельбы мы старались найти самые большие корабли, чтобы уменьшить количество проверяемых ячеек, за счет гарантированных пустых ячеек. Поэтому при размещении своих кораблей следует располагать их таким образом, чтобы минимизировать количество гарантированно свободных ячеек в случае потери. Как вы помните, линкор в центре открывает противнику 14 клеток, а линкор в углу открывает врагу только 6 клеток:
Точно так же крейсер, стоящий в углу, открывает только 6 слотов вместо 12. Таким образом, размещая большие корабли вдоль края поля, вы оставляете больше места для канонерских лодок. Поскольку стратегии поиска лодки нет, противнику придется стрелять наугад, и чем больше пустых мест останется до того, как лодка будет поймана, тем сложнее будет победить вашему противнику.
Ниже приведены три способа размещения больших кораблей, которые оставляют много места для лодок (отмечены синим цветом):
Каждая из следующих раскладок оставляет ровно 60 свободных мест для лодки, а это означает, что вероятность случайного попадания в лодку равна 0,066. Для сравнения стоит привести случайную компоновку корабля:
При таком расположении для лодки остается всего 21 ячейка, а значит, у нас есть шанс попасть в лодку 0,19, что почти в 3 раза больше.
В заключение я хотел бы сказать, что вам не следует тратить слишком много времени на морские бои. Особенно хочу предостеречь вас от разыгрывания лекций. Пока я сидел в «Ваби-саби», играя в «Морской бой» со своей девушкой, мимо прошла официантка и сказала, что у нее неплохо получается, потому что она много тренируется в классе. Кто знает, кем бы она была, если бы в свое время слушала лекции?
P.S. В комментариях было абсолютно справедливо отмечено, что в центре уже были похожие публикации, было бы ошибкой не ссылаться на них:

