Оптимальный алгоритм игры в морской бой. Морской бой на русском Программа для выигрыша в морской бой

26 мая 2013 в 20:27

Оптимальный алгоритм игры в морской бой

  • Алгоритмы

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

Правила игры

Существует множество вариантов морского боя, но мы с вами рассмотрим наиболее распространённый вариант со следующим набором кораблей:

Все перечисленные корабли должны быть размещены на квадратном поле 10 на 10 клеток, при этом корабли не могут соприкасаться ни углами, ни сторонами. Самое игровое поле нумеруется сверху вниз, а вертикали помечаются русскими буквами от «А» до «К» (при этом буквы «Ё» и «Й» пропускают).

Рядом рисуется вражеское поле аналогичного размера. При удачном выстреле по кораблю противника на соответствующей клетке вражеского поля ставится крестик и производится повторный выстрел, при неудачном выстреле в соответствующей клетке ставится точка, и ход переходит к противнику.

Оптимальная стратегия

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

В дальнейшем объяснении будут использоваться следующие обозначения:

Оптимальная стрельба
Первым и самым очевидным правилом оптимальной стрельбы является следующее правило: не стрелять по клеткам непосредственно окружающим уничтоженный корабль противника.

В соответствии с принятыми выше обозначениями, на рисунке жёлтым отмечены те клетки, по которым уже были произведены безуспешные выстрелы, красным отмечены клетки, выстрелы по которым закончились попаданием, а зелёным отмечены клетки, стрельба по которым не производилась, но можно гарантировано утверждать, что кораблей в них нет (кораблей там быть не может, т.к. по правилам игры корабли не могут соприкасаться).

Из первого правила сразу вытекает второе: если вам удалось подбить вражеский корабль, необходимо сразу же его добить, чтобы как можно раньше получить список гарантировано свободных клеток.

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

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

Для начала давайте рассмотрим участок игрового поля размером 4 на 4 клетки. Если в рассматриваемом участке есть вражеский линкор, то его гарантировано можно подбить не более чем за 4 выстрела. Для этого надо стрелять так, чтобы на каждой горизонтали и вертикали было ровно по одной проверенной клетке. ниже представлены все варианты такой стрельбы (без учёта отражений и поворотов).

Среди всех этих вариантов, оптимальными на поле 10 на 10 клеток являются только первые два варианта, гарантирующие попадание в линкор максимум за 24 выстрела.

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

Если при поиске линкора вы использовали вторую стратегию, то для поиска крейсеров и эсминцев вам необходимо стрелять по следующим полям (зелёным отмечены поля, по которым вы уже стреляли при поиске линкора):

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

Оптимальное размещение кораблей
Оптимальная стратегия размещения кораблей в некотором смысле обратна оптимальной стратегии стрельбы. При стрельбе, мы пытались найти самые крупные корабли, чтобы сократить количество клеток, которые нужно проверять, за счёт гарантировано свободных клеток. Значит, при размещении корабли надо ставить таким образом, чтобы в случае их потери минимизировать количество гарантировано свободных клеток. Как вы помните, линкор в центре поля открывает для противника сразу 14 полей, но линкор, стоящий в углу, открывает для противника всего 6 полей:

Аналогично, крейсер, стоящий в углу, вместо 12 полей открывает всего 6. Т.о., разместив крупные корабли вдоль границы поля, вы оставляете больший простор для катеров. Т.к. стратегии для поиска катеров нет, противнику придётся стрелять наугад, и чем больше свободных полей у вас останется к моменту ловли катеров, тем тяжелее будет выиграть противнику.

Ниже представлено три способа размещения крупных кораблей, которые оставляют большой простор для катеров (отмечено синим):

Каждая из приведённых расстановок оставляет для катеров ровно 60 свободных клеток, а это значит, что вероятность случайно попасть в катер составляет 0,066. Для сравнения стоит привести случайную расстановку кораблей:

При такой расстановке для катеров остаётся всего 21 клетка, а это значит, что вероятность попадания по катеру составляет уже 0,19, т.е. почти в 3 раза выше.

В заключение хочу сказать, что не стоит проводить уж слишком много времени, играя в морской бой. Особенно хочу предостеречь вас от игры на лекциях. Когда я сидел в Ваби-Саби и играл в морской бой со своей девушкой, мимо прошла официантка и сказала, что она весьма неплохо играет, т.к. много практиковалась на парах. Кто знает, кем бы она работала, если бы в своё время слушала лекции?

P.S. В комментариях абсолютно верно указывают, что на хабре уже были похожие публикации, было бы неверно не поставить ссылки на них.

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

Инструкция

1. В игре «Морской бой вы размещаете на своем игровом поле десять кораблей – четырехпалубный, два трехпалубных, три двухпалубных и четыре однопалубных корабля.

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

3. Однопалубные корабли поместите хаотично в всяких свободных клетках поля – это затруднит их поиск противником и даст вам вероятность выиграть время для победы, потому что многопалубные корабли, расположенные по краям поля, ваш противник обнаружит достаточно стремительно. Повод этого заключается в том, что игровое поле состоит из 100 клеток, в то время, как шесть кораблей займут из них 16 клеток.

4. Расположив корабли по краям поля, вы сделаете при их поражении неактивными только несколько клеток вокруг, тем временем, как размещение трехпалубного корабля в центре поля сделает неактивными сразу 12 неактивных клеток вокруг него, а значит, сузит искания новых кораблей для противника.

5. Чем огромнее энергичных клеток для выстрелов остается у противника, тем огромнее у вас вероятностей подбить его корабли благополучным попаданием.

6. Верно так же, поместив в центре поля четырехпалубный корабль, вы теряете целых 14 пустых клеток вокруг него. Если же корабль поместить на краю поля, вы утратите каждого 8 клеток. Тем самым, если сложить все неактивные клетки, остающиеся от кораблей, расположенных по краям, вы получите достаточно крупный выигрыш во времени и в числе свободных полей для противника.

7. Дабы побороть с фактически стопроцентной вероятностью, начав игру, выстрелите в центр поля противника. Так вы осознаете, поместил ли он в центре поля свои корабли, либо придерживается вашей тактики.

8. Играйте ступенчато – если вы подбили корабль, идите по каждом его палубам, пока корабль не будет потоплен. Потом переходите к поиску иного корабля.

9. В самом конце ступенчато, исходя из оставшихся ячеек, ищите однопалубные корабли противника.

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

Шаги

Максимизация попаданий по кораблям противника

    Обстреляйте центр игрового поля. Статистически, вероятность попадания первого выстрела по кораблю будет выше, если целиться в центр игрового поля.

    • Центральный участок игрового поля площадью четыре на четыре квадрата с большой вероятностью может содержать четырехпалубный или трехпалубный корабль.
  1. Для повышения шансов на поражение корабля противника, обстреливайте игровое поле параллельными линиями. Представьте себе игровое поле в виде шахматной доски, где половина квадратов темная, а половина – светлая. Каждый крупный корабль, начиная от двухпалубного, будет занимать не менее двух клеток игрового поля, одна из которых обязательно будет темной. Таким образом, если случайным образом обстреливать только четные или только нечетные номера квадратов, то вы уменьшите количество возможных выстрелов до попадания по кораблю.

    • Как только ваш выстрел поразит корабль противника, вы прекратите случайный обстрел и начнете целевую стрельбу по кораблю.
    • Чтобы не запутаться с темными и светлыми квадратами игрового поля, представьте себе, что диагональная линия, идущая от его верхнего левого до нижнего правого угла, состоит из темных квадратов. А диагональ от верхнего правого до нижнего левого угла состоит из светлых квадратов. Это послужит вам ориентиром для точного определения цвета квадратов, по которым вы собираетесь стрелять.
  2. После двух промахов на одном участке переходите к обстрелу следующего участка. Если вы дважды промазали в одном месте игрового поля, попробуйте попытать удачу на другом участке. В такой ситуации вероятность снова промазать будет меньше, если обстрелом вы охватите большую площадь, а не будете продолжать обстреливать неудачный участок.

Целевые обстрелы после первого попадания по кораблю

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

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

    Чтобы потопить еще больше кораблей противника, повторите все с самого начала. После первого потопленного корабля вам придется вернуться к случайным обстрелам игрового поля (или его центра), чтобы найти следующий корабль. Затем повторите целевой обстрел вокруг места удачного выстрела, пока следующий корабль не пойдет ко дну. Указанный подход к игре позволяет снизить количество ходов, которое требуется на то, чтобы потопить все корабли противника и выиграть игру.

Правильная расстановка собственных кораблей для минимизации возможного урона

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

  1. Попробуйте расставить корабли близко друг к другу. Несмотря на то, что расстановка соприкасающихся кораблей запрещена классическими правилами игры, в вариативных правилах она допускается и даже может служить своего рода стратегией. Расположив два соприкасающихся корабля по одной линии можно запутать противника, чтобы он не понял, какой тип корабля был им потоплен.

    • Помните о том, что близкое расположение кораблей может как сработать вам на руку, так и оказаться рискованной затеей, ведь оно может привести к случайному обнаружению противником и других ваших кораблей.

Если не пробовали играть в Морской Бой, то скорее всего, вас забросили инопланетяне. Потому, что в списке дел русского школьника игра «Морской бой» помечена как «верное средство от скуки» и сегодня самое время убедиться!

Давайте научимся играть в «Морской бой» онлайн - на русском языке бесплатно и без регистрации. Вам даже не нужен соперник - сразитесь с компьютером! Начнём с основ.

Правила как играть в морской бой на листочке

Оригинальный Морской бой - классическая настольная игра на тактику и внимательность, где двум игрокам полагалось начертить на листике в клеточку 2 сетки 10×10 с буквами по горизонтали и цифрами по вертикали. Первая - поле для размещения своего флота из 10 кораблей так, чтобы не видел соперник. Вторая - план боя с отметкой ходов в сторону противника.

Флот состоит из:

  • 1 «четырёхпалубный линкор»;
  • 2 «трёхпалубных крейсера»;
  • 3 «двухпалубных эсминца»;
  • 4 «однопалубные лодки».

При расстановке обязательно учитывается расстояние в 1 клетку (корабли не должны соприкасаться ни бортами, ни кормами).

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

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

Как расставить корабли чтобы выиграть в Морской Бой

Самые уязвимые мишени - четырёхпалубные и трёхпалубные корабли, их просто выявить, если стрелять с интервалом в три клетки. Обычно их ставят далеко друг от друга, но в одной диагонали, под углом. Обойдите это правило - ставьте корабли кучнее - все крупные вертикально или горизонтально.

Учитывайте обязательное расстояние между занятыми позициями: в радиусе одной клетки от подбитых кораблей не может быть других целей.

Старайтесь сократить площадь занятых участков и запутать противника - «на виду» размещайте самые маленькие корабли.

Враг обязательно будет стрелять рядом с точкой попадания, чтобы определить, как расположено подбитое боевое судно - вертикально или горизонтально. Чтобы выгадать время и спровоцировать на ошибку меняйте пространственное размещение однотипных кораблей и по максимуму задействуйте край сетки.

Думайте как противник. В большинстве случаев вражеские корабли расположены на расстоянии друг от друга, чтобы усложнить задачу по их выявлению бейте вразброс, но помните про правила размещения (в радиусе одной клетки не может быть других занятых позиций).

Готовы проверить, насколько действенный этот метод игры в Морской бой? Открывайте игру на весь экран и удачной битвы! Ждём ваших результатов в комментариях.

Управление

Используйте компьютерную мышь, чтобы, кликнув на корабль и удерживая мышку нажатой перетащить линкоры на сетку.

Для изменения положения в пространстве (разворота горизонтально или вертикально) - удерживайте Ctrl, пока кораблик вне сетки и только после этого кликайте и перетаскивайте.

СТРАТЕГИЯ И ЕЩЁ РАЗ СТРАТЕГИЯ.

И я сейчас вам это докажу. Начнём с того как надо стрелять! Вообще-то надо было начать с раставления, но его мы оставим на потом т.к. после того как вы поймёте как надо стрелять, вам будет легче понять основы расставления. Урок первый: никогда не обстреливайте одну точку, это самое бесперспективное, что я когда-либо видел! Урок второй: если в одном месте вы сбили несколько кораблей, но у вас остались дырки (не обстрелянная клеточка вокруг которой все клеточки обстрелянны!), то никогда не спешите затыкать их, если у противника остался хоть один корабль больше двушки (включая двушку)!

Дальше перейдём к стратегиям обстрела! Лично я выделяю две ЛИНКОР и ОПЕРАЦИЯ ТРЁШКИ! (Может они и имеют другие названия, просто до всего о чём я вам сейчас пишу я дошёл своим умом! И поэтому считаю вправе дать им свои названия!) Остановимся на первой!

Состоит в том чтобы как можно быстрее найти и уничтожить самое неповоротливое судно линкор! Тем самым значительно сократив поле противника! Подбить его на 100% можно с 24 выстреллов! Вот как они должны распологаться! * обзначенны выстреллы, о клетки которые бы я советовал оставить на потом! А цыфрами 1 (которых кстати восемь) выстреллы которые надо произвести ПЕРВЫМИ! В таком случае с первых 8 выстреллов вы подобъёте
34% линкор
50% трёшку
45% двушку
32% однушку
Таблица номер раз:
|————|
|__а б в г д е ж з и к |
| 1)о о о 1 о о о * о о |
| 2)о о * о о о * о о о |
| 3)о * о о о * о о о * |
| 4)1 о о о 1 о о о * о |
| 5)о о о 1 о о о * о о |
| 6)о о * о о о 1 о о о |
| 7)о * о о о 1 о о о 1 |
| 8)* о о о * о о о * о |
| 9)о о о * о о о * о о |
| 0)о о * о о о 1 о о о |
I————|
Вообще-то можно было и больше! Но у матёрых противников БОЛЬШИЕ корабли как правило стоят у бортов!
Дальше методично начинайте отстреливать другие звёздочки! Само собой разумееться, что подбив корабль, убивайте его! После того ка вы их всех обстреляете
приступайте к таблице номер два!
Таблица намер два:

Задача её в том, чтобы убить все оставшиеся трёшки и двушки! * я обозначил те поля где вы уже должны были побывать, о поля в которые стрелять не нужно, а z именно те клетки куда нужно стрельнуть! Всего их 24, но ведь вы уже вынесли половину флота! И поэтому останеться вам всего лишь около 15 выстрелов! Ну, а после дело лишь за удачей в борьбе с однушками! Но ведь это в самом конце! К тому же если противник
расставил свой флот не очень умеюще, то однушки для вас не составят особых проблем.
Само собой, что стрелять можно не только так как я показал! Но главное, чтобы этот принцип сохранился!
I————I
I__а б в г д е ж з и к I
I 1)o z о * о z о * о z I
I 2)z о * о z о * о z о I
I 3)о * о z о * о z о * I
I 4)* о z о * о z о * о I
I 5)о z о * о z о * о z I
I 6)z о * о z о * о z о I
I 7)о * о z о * о z о * I
I 8)* о z о * о z о * о I
I 9)о z о * о z о * о z I
I 0)z о * о z о * о z о I
I————I

ОПЕРАЦИЯ ТРЁШКА!
Как вы ныверное уже догадались состоит она в том, чтобы найти трёшки противника! (а заодно и линкор!)
Вот ваши выстреллы (всего их 36)! Сделав все выстреллы, вы подобъёте линкор, обе трёшки, почти наверняка одну двушку (может и две) и одну однушку! Чтож, достаточно неплохо за 36 выстрелов! Но вот, что делать потом? Просто стрелять полагаясь на удачу. Так, что лучше выбирайте ЛИНКОР! Хотя у вас есть 0.25%, что стрельнув по этим полям вы подобъёте все корабли! Разумееться эти две тактики работают не только на тех клетках которые я показал в таблицах! Каждая таблица имеет до 8 зеркал! То есть если вы например повернёте таблицу на 90 градусов, а буквы и цифры мысленно перенесёте, то получите новое значение таблицы с той же стратегией! Но совершенно другими клетками прострела! Следовательно расстановки с которой эта бы стратегия (а заодно и все другие) работала очень плохо (например не сбивалабы не одной двушки и не одной однушки!) НЕ СУЩЕСТВУЕТ! Хотя сществует расстановка именно против ЭТОГО типа данной стратегии, но зато с другим типом стратегии вы получите 100% попадание!
|————|
|__а б в г д е ж з и к |
| 1)o о * о о * о о * о |
| 2)о * о о * о о * о о |
| 3)* о о * о о * о о * |
| 4)о о * о о * о о * о |
| 5)о * о о * о о * о о |
| 6)* о о * о о * о о * |
| 7)о о * о о * о о * о |
| 8)о * о о * о о * о о |
| 9)* о о * о о * о о * |
| 0)о о * о о * о о * о |
|————|
. РАСТАНОВКА.
Основвываеться на том, что корабли не могу касаться друг друга! Поэтому если вы например поставите линкор в середину, а противник подобъёт его то вы потеряете 18 клеточек (4 клеточки линкор и 16 клеточек вокруг него!)! Следовательно линкор нaдo ставить к стенке! И пусть даже противник быстро подобъёт его, много клеток вы не потеряете! Внизу я приведу пример двух расстановок!
о-пустое поле
1-однушки
2-двушки
3-трёшки
4-линкор
*-клеточки рядом с кораблями (вокруг них)! То есть клеточки на которых корабли стоять не могут.

1) |————| 2)|————|
|__а б в г д е ж з и к | |__а б в г д е ж з и к |
| 1)* * * * * * * * * o | | 1)о о о о о * 4 4 4 4 |
| 2)* 4 4 4 4 * * 2 * * | | 2)о о о о о * * * * * |
| 3)* * * * * * * 2 * 1 | | 3)о о о о о о * 3 3 3 |
| 4)* * * * * * * * * * | | 4)о о о о о о * * * * |
| 5)* 3 * * 3 * * * * * | | 5)о о о о о о * 3 3 3 |
| 6)* 3 * * 3 * * 2 * 1 | | 6)о о о о о * * * * * |
| 7)* 3 * * 3 * * 2 * * | | 7)о о о о о * 1 * 2 2 |
| 8)* * * * * * * * * * | | 8)о о о о о * * * * * |
| 9)* 2 2 * * 1 * * 1 * | | 9)* * * * * * * 2 * 2 |
| 0)* * * * * * * * * * | | 0)1 * 1 * * 1 * 2 * 2 |
|————| |————|

Как видите в растановке 1 остался всего лишь один ноль! В то время как в расстановке 2 их 43.
Чем плохо, что остался лишь один ноль, спросите вы? А представте, что у вас сбили линкор и трёшки!
Если вы расставили свои корабли по первой стратегии, то вы потеряете 48 клеток (10 клеток от кораблей и 38 прилежащих к ним клеток!)! А раставив свои корабли по стратегии два, вы потеряете всего лишь 26 клеток! Почти в два раза меньше! А теперь представте, что все ваши корабли подбиты и осталась всего лишь одна однушка (что кстати ОЧЕНЬ часто бывает.). При расстановке 1 у вас останеться МАКСИМУМ 6 клеток! То есть с 6 выстреллов противник 100% убъёт вас! Но при игре 2 сбособом у вас останеться ещё очень много свободных, не занятых клеток. И противник потратит не один ход, чтобы выйграть. Конечно само-собой не так всё прекрастно, и протиник сразу же просичёт вашу стратегию при такой расстановке! Поэому ищем золотую середину, но с уклоном ко второй расстановки! Да вот она золотая середина! Вернее её образец.

Как видите горабли здесь находяться в одном углу! Тем самым оставляя совершенно пустым вторую половину!Теперь берём и переносим какие-нибудь два корабля (лучше однушки) в пустой угол! Даже если противник убъёт все ваши корабли, он будет очень долго искать ваши последние однушки! А вы успеете убить его пять раз.

Похожие публикации