Электрооборудование

Какая профессия дизайнера самая востребованная. Современная профессия архитектуры и дизайна

Какая профессия дизайнера самая востребованная. Современная профессия архитектуры и дизайна
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. В комментариях абсолютно верно указывают, что на хабре уже были похожие публикации, было бы неверно не поставить ссылки на них.

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

Общее

Игра «Морской бой» давно покорила многих людей. Она интересная, увлекательная, а главное - не требует каких-либо затрат. Чтобы поиграть с человеком вдвоём, понадобятся два листа бумаги в клетку (желательно) и две ручки (или 2 карандаша).

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

Правила

Что ж, можно приступать к основной части. Теперь-то вы узнаете, как играть в «Морской бой»:

1. Для начала нужно нарисовать на листе бумаги два квадрата размером 10х10 клеток (понятное дело, рисовать проще на листе в клетку). Затем на обеих рисунках проставить на верхнем ряду буквы от А до К (слева направо, пропуская Ё и Й), а слева от квадратов - цифры от 1 до 10-и (сверху вниз).

2. На левом квадрате необходимо расставить:

  • 1 корабль, состоящий из 4-х клеток;
  • 2 корабля, состоящих из 3-х клеток;
  • 3 корабля, состоящих из 2-х клеток;
  • 4 корабля, состоящие из 1-ой клетки.

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

Правый квадрат должен оставаться пустым.

3. Цель каждого из игроков - уничтожить вражеские корабли. Тот, кто ходит первым (по договорённости или по воле случая (с помощью жребия)), называет координаты (буква-цифра), глядя на правый пустой квадрат. Например, Е7. Соперник смотрит на свой левый рисунок, где расположены его корабли, и отвечает:

а) мимо;
б) ранил;
в) убит.

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

Второй вариант означает, что игрок попал в многопалубный корабль (занимающий от 2-х до 4-х клеток). Пометив в своей карте нужное место, человек имеет право на следующий ход до тех пор, пока не промахнётся. Так, если после выкрика Е7 проследовал ответ «ранен», игрок может назвать либо Е6, либо Ж7, либо Е8, либо Д7, чтобы добить раненный корабль (к слову, делать это не обязательно, можно временно оставить его в покое и искать другие). Второй игрок снова отвечает «мимо», «ранен» или «убит».

Третий вариант означает, что корабль противника уничтожен. Если это случилось с первого хода, значит, он был однопалубным (состоящим из одной клетки), что можно назвать большой удачей. Если со второго (например, после Е7 игрок сказал Е6), значит, двухпалубный и т.д. После подбивания корабля, как и после ранения, игрок ходит до тех пор, пока не получит ответ «мимо».

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

Иные вариации

Бывает «Морской бой» на бумаге, а бывает на компьютере, как уже говорилось ранее. И если для первого варианта нужен реальный, живой противник, то в последнем случае можно играть с роботами. Правда, во-первых, это не будет так интересно (реакция противника, когда топишь его корабль, бесценна), во-вторых, возможность подглядеть во вражеский флот исключается абсолютно (все мы понимаем, что некоторые люди так и норовят схитрить).

Так или иначе, придумать другие, более расширенные варианты игры несложно, всё зависит от фантазии игроков и их желания/умения экспериментировать. Важно сразу уточнять все правила, ведь если не каждому человеку будет ясно, как играть в «Морской бой», правила которого вы придумали, ничего хорошего не выйдет, качественной игры не получится.

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

Заключение

Вот и всё, теперь вы познакомились с новой игрой и вам известны её правила. Вопрос «как играть в "Морской бой"» должен быть исчерпан. Отныне вам с приятелями будет чем заняться во время скучных уроков/лекций или на работе, если имеется возможность находиться недалеко друг от друга и писать на листах бумаги.

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

Шаги

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

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

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

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

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

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

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

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

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

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

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

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

Игра «Морской бой» помогает людям скоротать время на уроках, лекциях, обеденных перерывах или просто холодными зимними вечерами уже более 80-ти лет. За это время сменилось немало поколений, но игра по-прежнему остаётся актуальной. Хоть она и вытесняется более современными и динамичными компьютерными играми, сегодня практически нереально найти школьника, который не знает, как играть в морской бой и что это вообще такое. Я расскажу вам о правилах игры, а также опишу выигрышную тактику. Рассмотрим, как играть в морской бой.

Правила игры

Игровое поле каждого игрока представляет собой квадрат 10х10, на котором размещаются корабли. Поле обязательно содержит числовые и буквенные координаты (по вертикали числа 1-10, а по горизонтали буквы от а до к). Для классической игры используются четыре одноклеточных корабля (подлодки), три двухклеточных (эсминцы), два трёхклеточных (крейсеры) и один четырёхклеточный корабль (линкор). Их рисуют внутри квадрата. По правилам, корабли не должны соприкасаться. Играть лучше всего на листке в клеточку, потому что чертеж кораблей представляет собой обведение клеточек. Одна палуба - одна клеточка. Размещать корабли можно как горизонтально, так и вертикально. Рядом со своим квадратом игрок чертит второй, на котором отмечает «выстрелы» по противнику. При попадании в корабль соперника, на чужом поле ставится крестик. Попавший игрок делает ещё один выстрел.

Нарушения

  • Количество кораблей не соответствует правилам
  • Корабли расположены вплотную друг к другу
  • Изменён размер поля
  • Указаны неправильные координаты

Процесс игры

  • Игроки решают, кто будет ходить первым
  • Игрок, выполняющий ход, называет координату, на которой, по его мнению, располагается корабль соперника. Например, квадрат А1.
  • При промахе соперник должен сказать «Мимо!», при попадании «Попал», «Ранил» или «Убил», в зависимости от размера корабля.
  • Игра продолжается до потопления всех кораблей одного из игроков.

Как выиграть в морской бой

Данная стратегия является одним из множества вариантов построения боя. Её суть заключается в том, что все большие корабли (от двух до четырёх клеток) располагаются в одном углу поля и как можно более компактно. А вот одноклеточные корабли разбрасываются по оставшейся части поля. В итоге, ваш соперник довольно быстро найдёт зону группировки больших кораблей довольно быстро и начнёт нещадно уничтожать их. В этот момент он почувствует себя настоящим гением, но мы-то знаем, в чём подвох. За время, которое соперник затратит на поиски маленьких кораблей вы с большой вероятностью успеете понять его тактику и уничтожить большинство кораблей, тем самым заставив его понервничать. Остальное – уже дело техники. В данной статье было рассказано о правилах, процессе игры и приведены примеры выигрышной тактики, как выиграть в морской бой. При грамотном подходе всё вышенаписанное может послужить хорошей базой знаний для получения максимального удовольствия от игры.

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

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

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

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

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

Как только ваш выстрел поразит корабль противника, вы прекратите случайный обстрел и начнете целевую стрельбу по кораблю.

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

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

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

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

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

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