Как посмотреть корабли в морском бою зд про по блютуз

Обновлено: 05.07.2024

Введение

Я позволю себе сократить вводную часть — для целостности картины рекомендую обратиться к предшествующим статьям:

Примечание

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

Режимы

В стратегии ведения боя явно можно выделить две стадии (два режима).

  • "Разведка боем". На карте противника нет ни одного «раненого» корабля. ИИ выбирает точку для атаки «полностью здорового» судна.
  • "Добивание". На карте есть клетка (клетки) отмеченные как «ранил». ИИ пытается определить корпус и ориентацию судна, чтобы потопить его.

Разведка

Для того, чтобы добиться уровня абстракции, позволяющего атаковать эскадру, сформированную из произвольного количества судов произвольной формы (тем не менее, согласно правилам, данная информация о сопернике заранее известна), введём понятие вероятности нахождения в данной клетке игрового поля фрагмента неподбитого корабля («палубы»). Критерием для выбора точки атаки будет величина, пропорциональная упомянутой выше вероятности, а именно: нормированное количество палуб, которые могут попасть в эту клетку, если каждый из кораблей противника (из тех, что на плаву) попытаться разместить на поле всеми возможными способами.
Поясню: берём матрицу (далее — «P-матрица»), размерами соответствующую, размерам поля противника. Заполняем её нулями. Берём первый доступный (то есть ещё не утонувший) корабль противника из списка кораблей соперника и пробуем его разместить (в соответствии с правилами и опираясь на полученную в ходе обстрела информацию) в координатах А1. Если разместить удалось, то инкрементируем в P-матрице все элементы (соответствующие клеткам игрового поля), накрываемые корпусом корабля. Повторяем процедуру для всех координат. Затем поворачиваем корабль на 90 градусов и ещё раз повторяем проход для всех координат. То же повторяем для 180 и 270 градусов.
В итоге, мы заполним P-матрицу значениями, которые для удобства нормируем по максимуму. Полученная характеристика принимает единичное значение в наиболее вероятных точках нахождения кораблей и нулевое в невозможных. Например, на необстрелянной карте, центральные точки (для классической эскадры) имеют максимальное значение.
Стоит определиться с термином "вероятность", чтобы избежать его превратного толкования. Данный алгоритм предполагает равномерное расположение кораблей по полю. Попытки распихать суда по краям поля должны детектироваться отдельно. Например, можно ввести весовую матрицу, которая каким-то образом будет формироваться в ходе обучения (предшествующих игр с данным соперником): если до этого противник никогда не ставил корабль в центре поля, то соответствующие клетки весовой матрицы будут иметь минимальный коэффициент. В любом случае: это не шахматы — всегда есть неизвестная информация, которая, при удачном стечении обстоятельств, может дать преимущество «обороняющемуся».
На рисунке слева приведена визуализация P-матрицы при первом ходе ИИ в игре с классической эскадрой. Цвет [ RGB(0;0;0); RGB(255;0;0) ] показывает значение клетки. Белым крестиком отмечены максимумы значений. Как нетрудно заметить, максимумов, как правило, несколько. Чтобы разнообразить игру и исключить потенциальную возможность предугадать точку атаки, выбранную ИИ (и соответствующим образом расставить корабли), выбирать будем произвольную точку из максимумов (на рисунке — имеет жёлтую рамку).
Ответы соперника «мимо» или «убил» оставляют режим работы ИИ без изменений (во втором случае необходимо произвести ряд действий). Ответы запоминаются в специальную матрицу, аккумулирующую знания о расстановке сил противника. Именно "на этой матрице" производятся попытки размещения кораблей при вычислении P-матрицы.
При использовании только классической эскадры возможно провести оптимизацию вычисления матрицы (об этом ниже).

Добивание

После того, как от соперника получен ответ «ранил», ИИ переходит во второй режим функционирования.
В этом режиме при вычислении P-матрицы количество «палуб» проверяемого корабля должно быть больше, чем количество клеток «ранил». Корабль инкрементирует значения элементов P-матрицы, только если данное его размещение накрывает все клетки, отмеченные как «ранил». После перебора всех кораблей происходит дополнительное акцентирование на клетках «ранил». Так как стрелять в такие клетки бессмысленно (но, в отличии от клеток «мимо», они являются частью корабля, и потому имеют ненулевое значение в P-матрице), значения соответствующих элементов P-матрицы обнуляются. Обнуляются так же клетки, не примыкающие ни к одной из клеток «ранил». Последнее обстоятельство связано с тем, что при некотором стечении обстоятельств, усиленном экзотической формой кораблей не классической эскадры, можно выбрать в P-матрице максимум, который соответствует другом кораблю (что возможно, только если атакуемая клетка отстоит от «раненой»). Такая ситуация приведёт к тому, что ИИ будет пытаться подобрать корабль, удовлетворяющий обеим клеткам, что рано или поздно кончится неудачей. Это в свою очередь приведёт к тому, что все элементы P-матрицы примут нулевые значения, а, следовательно, уже обстрелянные точки станут адекватными вариантами атаки. Поэтому, разумной является атака близлежащих точек.
На рисунке слева представлены две матрицы (точнее, визуализации их значений). Верхняя — с расположенными на белом поле серыми кораблями. На предыдущем ходу ИИ осуществил успешную атаку на Ж4 (то обстоятельство, что первый же ход увенчался успехом — совпадение), «раненая» клетка отмечена жёлтым. Внизу приведена P-матрица. Учитывая геометрию актуального набора кораблей, у ИИ было 4 равновероятных варианта атаки (отмеченные крестиком клетки), из которых он выбрал Ж3 (клетка с жёлтой рамкой). Ход завершился промахом (синяя клетка в верхней матрице).
При наборах кораблей с экзотической геометрией, матрицы могут выглядеть куда как более загадочно. Хоть я и привык играть с классической эскадрой, но не вижу ничего предосудительного в использовании кораблей почти произвольной формы. Такие модели, могут имитировать, например, скоростной катамаран, RV FLIP, тяжёлый авианесущий крейсер, «бетонный линкор». Не говоря уже о том, что неподвижные (по логике игры) объекты можно интерпретировать и как маломобильные (или стационарные) стратегические объекты на суше во время глобальной войны. С позиции игрового процесса, на мой взгляд, подобное усложнение лишь добавляет азарта при игре.
На рисунке справа показана ситуация: после нескольких удачных залпов ИИ выбирает не то направление и промахивается на Е13. Обратите внимание, что было 10 вариантов хода, имеющих смысл, из них 2 наиболее вероятных.
Режим «добивание» переключается на «разведку» только после ответа соперника «убил». Как и при первом режиме, полученная в ходе обстрела информация учитывается при формировании P-матрицы на следующем ходу.

Классика

  • Если сумма расстояний + 1 (тестируемая клетка) меньше, чем длина корабля, то результат равен 0.
  • Если сумма расстояний + 1 равна длине корабля, то результат равен 1.
  • В остальных случаях, характеристика:
    • не меньше 1
    • не превышает длину корабля
    • ограничивается минимальным расстоянием до препятствия
    • 1. Корабль уничтожен. Переходим в режим поиска новой жертвы.
    • 2. Промах. Значит атака была начата не с крайней точки. Инвертируем направление обстрела, продолжаем атаку от точки первого «ранения»
      • 2.1. Промах на первом же выстреле в режиме добивания. Значит, направление выбрано ошибочно. Необходимо заново вычислить вероятности направлений, учитывая полученную информацию.

      Заключение


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

      Критика

      Спасибо за интересные и конструктивные замечания!

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

      на поле осталось пять клеток в линии и два корабля 1х2, то оптимальный алгоритм уничтожит их за 4 выстрела без промахов. Ваш же алгоритм определит, что «вероятность» нахождения корабля в центре — максимальна, и может попытаться выстрелить туда (в одном случае из трех).



      Действительно:

      В отличии от очевидной человеку оптимальной тактики, ИИ с вероятностью в 33% предпримет априорно неверное решение, атаковав А3 на N-ом ходу. На (N+1)-ом ходу (в случае успеха на N-ом) может быть реализована ошибочная атака с вероятностью в 50% (на рисунке — атака на А3 на втором слайде).
      Как отмечает mayorovp,
      Оптимальный алгоритм должен
      1) при подсчете вероятности размещать на поле не один корабль, а всю эскадру противника с учетом ограничений на соседство;
      Отмечается и слабость адаптации к неравномерному распределению кораблей на игровом поле в ходе обучения:
      2) учитывать, что противник может намеренно разместить свою эскадру в наименее вероятной позиции (по краям, например), и предпринимать ответные действия уже в первой игре, вместо обучения под конкретного соперника.
      К сожалению, мой «всеобъемлющий» подход столкнулся со сложностями вычислительного характера, что даже на современных компьютерах просчитать все комбинации невозможно, а можно лишь искать некоторое приближение методом Монте-Карло, но и это оказалось затруднительно в реальном времени.

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

      По вполне обоснованному совету limon_spb и других пользователей, убрал излишне претенциозную характеристику «оптимальный». Так как подобное заявление требует объективного доказательства, которое в статье не приведено, и, в силу вышесказанного, приведено быть не может.

      Андрей Кедров

      Тёмка Матютос

      Есть какой-нибудь гайд по игре? Как развиваться? На что обращать внимание в первую очередь?

      Алексей Шипаков

      Тёмка Матютос

      Что такое карма? Как её зарабатывать? Как купить корабль? Как действуют пушки? По моему, и без них можно поражение нескольких клеток за раз использовать. Сделайте квесты, создайте "помощь", ибо игра пока сыровата и пресна. Многое непонятно.

      Тёмка Матютос

      Что даёт прокачка лвл-ла? Предлагаю бонусы хоть какие-то за левел ап. Пока не вижу смысла его качать. Как ранг поднимать и зачем вообще?

      Тёмка Матютос

      Андрей Кедров

      > Есть какой-нибудь гайд по игре? Как развиваться? На что обращать внимание в первую очередь?

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

      Андрей Кедров

      > а и где можно посмотреть достижения .

      В ближайшее время будут, дизайн еще не готов, сами ждем

      Андрей Кедров

      > Что такое карма? Как её зарабатывать?
      Карма влияет на то, к какой стороне вы относитесь - пират, или королевский флот. По ходу игры это будет влиять на дополнительные корабли, которые вы сможете получить проходя различные задания. Зарабатывается посредством разгрузки / грабежа кораблей при просмотре профайла ваших друзей в игре.

      > Как купить корабль?
      Корабли, а так же все их компоненты покупаются в порту

      > Как действуют пушки? По моему, и без них можно поражение нескольких клеток за раз использовать.
      Пушки какие именно? Есть пушки от корабля, в разделе порт, а так же есть отдельный раздел пушки. Если брать первое - они увеличивают вероятность срабатывания приемов, которые размещены под ними по иерархичной цепи. Если брать отдельный раздел - это, скажем так, приемы. Их использование не требует наличия корабля, а так же некоторых дополнительных требований, связанных с кораблем, к которому они привязаны. То есть, вы можете использовать приемы как с корабля так и с пушек, как вам развиваться - решать вам :) Если у вас в игре есть друзья, которых вы можете поставить на должности офицеров корабля (в разделе команда), то я бы советовал вам развивать корабли. Если нет - покупайте приемы, суммарно, они дороже чем развитие корабля, но они не имеют требований, у них более быстрый откат (восстановление по ходам), а так же 100% шанс попадания по клеткам и 100% шанс срабатывания.

      > Сделайте квесты, создайте "помощь", ибо игра пока сыровата и пресна. Многое непонятно.
      Все в процессе, над игрой работа кипит

      Андрей Кедров

      > Что даёт прокачка лвл-ла? Предлагаю бонусы хоть какие-то за левел ап. Пока не вижу смысла его качать. Как ранг поднимать и зачем вообще?

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

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

      Андрей Кедров

      > Как часто можно бить боссов?

      каждого из боссов не чаще 1 раза в сутки (если не ошибаюсь, в данном случае, началом новых суток является 00:00 по МСК).

      splash

      Хотите вспомнить, как это было? Или узнать, что это такое? Нет проблем. В новинках магазина Samsung Apps было замечено новое, ностальгическое издание одной из самых популярных игр современности «Морской бой: Противостояние». И совершенно бесплатно!

      Скачиваем, устанавливаем, играем

      Действительно, игра предстает перед нами практически в том обличии, которое от неё и требовалось. Ничего лишнего и все по делу.

      Раньше как? Бывало снизойдет желание зарубиться с приятелем, а как только доходит дело до дела, то приходит понимание, что надо вырвать листок, нарисовать поля и корабли… Все, давай потом.

      Забудьте! Практически все за вас сделали разработчики в лице самой игры. Поля начертили, даже прямоугольники и кубики кораблей можно расставить одной кнопкой. Не хотите так – можно пальцем или стилусом. Кстати, для обзора мы тестировали игру на новом планшете Samsung Galaxy Note II с использованием электронного пера S Pen. Использование пера еще сильнее приближает к тому самому ощущению, когда играешь на вырванном листке бумаги. Просто попробуйте.

      draw_2

      Да, перед тем как расставлять надо решить как и с кем играть. И тут очень кстати одно из главных достоинств игры! Новая версия предлагает вам возможность игры, как в однопользовательском режиме, так и с соседом по кабинету или парте через Bluetooth, и даже, например, в кафе по Wi-Fi сети.

      players_2

      Как уже было отмечено выше, ожидания от игры оправдались. Это касается и пунктика с графикой – именно такое визуальное оформление и должно быть у настоящего бумажного Морского боя! Любая другая реализация просто убила бы весь шарм классической игры.

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

      Битвы происходят весьма динамично и непредсказуемо. Отличие «Морского боя» от других игр в том, что в каждом новом бою перед игроком встает вопрос «Какой же корабль подбить первым?», ведь их 10, а выбрать требуется только один. И самый непредсказуемый момент – «Как лучше добивать уже подбитый корабль?».

      battle_1

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

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

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

      weapon

      Подытожим и перейдем к плюсам/минусам. Итак, что мы имеем:

      • поиск противников вокруг и возможность играть по каналам Wi-Fi/Bluetooth ;

      • игра с виртуальным противником в режиме однопользовательской игры;

      • ностальгический, тетрадный, дизайн боевых полей;

      • в озможность размещения кораблей вручную или в автоматическом режиме;

      • использование стилуса или пальцев для управление игрой;

      • потрясающие визуальные и звуковые эффекты лишь немного не дотягивающие до экранизации игры;

      • постоянно обновляющийся З ал Славы;

      • возможность приобретения дополнительного вооружения через Samsung In-App Purchase.

      Игра «Морской бой: Противостояние» со всеми ее достоинствами и нововведениями, бесспорно, станет одной из Ваших любимых игр.

      Достоинства:

      Недостатки:

      Единственный существенный недостаток – сейчас игра доступна только владельцам телефонов и планшетов Samsung, но думается это только пока.

      Pirates! Showdown

      Множество кораблей, осады башен, погони за пиратами - вот что вас ждёт в этой стратегической игре.

      Atlantic Fleet

      Продолжение одной из лучших морских стратегий для Андроид.

      Silent Submarine Career

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

      Naval Clash: Морской бой

      Бумажные листочки в клеточку отошла в прошлое. Naval Clash - электронная версия любимой игры детства. Но здесь вам не придётся каждый раз рисовать поле для боя и самостоятельно отмечать пустые клетки..

      Pirates 3D Cannon Master

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

      Sea Battleship Combat 3D

      Динамичный экшен в сеттинге современных морских баталий.

      Royal Sails

      16 век, Карибское море, Война между Англией и Испанией. Вы в роли капитана Королевского флота Англии должны помочь установить господство Британской Империи в этом регионе. Сражайтесь с кораблями противника и захватывайте торговые суда!

      Naval Creed:Warships

      Примите свое участие в масштабных морских сражениях и измените ход истории.

      Battleship vs Submarine Gold

      Морская аркада с эпическим сюжетом.

      Перенеситесь во времена Второй мировой войны и станьте участником великих морских битв тех времен!

      Classic Battleship

      Настольная игра морской бой с несколькими режимами.

      Sink Em All!

      Морской бой на пиратских парусных судах, защитите свой остров сокровищ от пиратов захватчиков!

      BATTLESHIP: Official Edition

      Официальная настольная игра где вы будете играть в морской бой.

      Fleet Battle - Sea Battle

      Отличная настольная игра где будете играть в морской бой.

      v2.0.42 + Мод: бесплатные улучшения

      Navy Base

      Возьмите под свое командование огромную флотилию и защитите военную базу от вражеских кораблей.

      Читайте также: