java — Как расставить корабли в игре «Морской бой»
У меня есть массив с массивами, в которых хранятся числа:
int[][] pole = new int[][] { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} };
И код который добавляет корабли в этот массив (поле):
//set 1x4 ship int j = new Random().nextInt(6)+1; if(new Random().nextBoolean()) for (int i = 0; i < 4; i++) { pole[j][i]=1; pole[j-1][i]=2; pole[j+1][i]=2; if(i==3){ pole[j-1][i+1]=2; pole[j+1][i+1]=2; pole[j][i+1]=2; } } else for (int i = 0; i < 4; i++) { pole[i][j]=1; if(i!=0&&j!=6){ pole[i-1][j+1]=2; pole[i+1][j+1]=2; pole[i][j+1]=2; } if(i!=0){ pole[i-1][j-1]=2; pole[i+1][j-1]=2; pole[i][j-1]=2; pole[i+1][j]=2; } } while(true){ if(new Random().nextBoolean()) if( pole[j][0]!=1&&pole[j][0]!=2&& pole[j][1]!=1&&pole[j][1]!=2&& pole[j][2]!=1&&pole[j][2]!=2 ){ for (int i = 0; i < 3; i++) { pole[j][i] = 1; pole[j - 1][i] = 2; pole[j + 1][i] = 2; if (i == 2) { pole[j - 1][i + 1] = 2; pole[j + 1][i + 1] = 2; pole[j][i + 1] = 2; } } break; } else if( pole[0][j]!=2&&pole[0][j]!=1&& pole[1][j]!=2&&pole[1][j]!=1&& pole[2][j]!=2&&pole[2][j]!=1 ){ for (int i = 0; i < 3; i++) { pole[i][j]=1; if(i!=0&&j!=6){ pole[i-1][j+1]=2; pole[i+1][j+1]=2; pole[i][j+1]=2; } if(i!=0){ pole[i-1][j-1]=2; pole[i+1][j-1]=2; pole[i][j-1]=2; pole[i+1][j]=2; } } break;} }
Но этот код при выполнение начинает зависать.
Подскажите пожалуйста, может кто-нибудь делал морской бой под Android, как вы делали система автоустановки кораблей?
Ручная установка краблей — Разные уроки по Программированию
Расстановку кораблей разделим на следующие задачи. Во первых объявим процедуру в который будем реализовывать все функции расстановки кораблей в ручную 1) Выводим на экран, поле с текущим состоянием расстановки кораблей. Это реализовано в задаче Поле игрока. В начале функции вызовем данную процедуру. 2) Даем выбор пользователю что он хочет делать устанавливать или удалять корабли Для отображения меню выбора пользователем воспользуемся функцией описанной в Стартовое меню.Но если пользователь еще не завершил установку игрока не будем ему давать возможность начать игру. 4) Если корабли расставлены то предлагаем запустить игру. Для этого просто добавим вывод последней строки. 5) Вывод расположения корабля будет выполняться по тому же принципу. Создаем массив и выводим его функцией на экран. 5) Расстановка кораблей проходит до тех пор пока у игрока есть в ангаре хоть один корабль для этого мы должны сообщать сколько у него осталось кораблей. Выведем на экран меню в котором будем выводиться еще и количество кораблей. Для этого добавим модифицированную функцию вывода меню. По мимо вывода на экран строки меню будет еще выводить количество кораблей. Вызовем данное меню на экран: 7) Вывод меню на экран это пол дела нам нужно реализовать процесс выбора элементов меню. | 72 | Стрелка клавиатуры влево. Позволяет переместить выбор на следующий элемент массива влево, т.е.X++ |
V | 80 | Стрелка клавиатуры в право. Позволяет переместить выбор на следующий элемент массива в право, т.е.X— |
Enter | 13 | Клавиша ввода. Позволяет ввести значение в выбранный элемент массива тем самым его изменить. т.е. M[X] = что то ввели |
6) Добавляем возможность двигать курсоры в меню. Так как у нас целых 3 меню выбора мы объявим массив из 3 курсоров которые будут изменяться в зависимости от выбранного режима. Объявим данные курсоры в начале функции GameEdit()
Так как курсоры должны переключаться между ограниченными вариантами значений мы должны объявить второй массив который будет ограничивать параметр каждого из них. Поэтому объявим 2 массив для ограничений.
8) Добавим курсор и ограничения в функции вывода меню.
7) Даем управление курсором с помощью клавиш вверх и вниз на клавиатуре.
8) Пользователь указывает клетку куда будем устанавливать первую палубу корабля. В виде сочетания символов буквы и цифры для того чтобы получить из них координаты мы напишем функцию получения этих координат.
9) После получения координат в виде строки получаем координаты в виде цифр.
9) А далее на основе выбора игрока передаем в функцию установки корабля параметры заданные пользователями.
Вся функция целиком:
Вызываем данную функцию в нашей главной функций
Как выиграть в Морской бой: 15 советов, приемов и стратегий (увеличьте свой процент побед)
Морской бой — одна из самых популярных в мире стратегических игр, которая существует со времен Первой мировой войны. С тех пор как первая игра «Морской бой» была напечатана в 1931 году, она стала фаворитом среди любителей настольных игр. Но хотя большинство людей знают, как играть в Battleship, немногие знают о его выигрышных стратегиях.
В оставшейся части этой статьи я поделюсь несколькими эффективными стратегиями и тем, как вы можете использовать их для увеличения своего винрейта.
Вот несколько советов и стратегий, которые помогут вам победить в Battleship:
1. Не концентрируйте все свои корабли в одном сегментеЦель Battleship — снизить вероятность поражения ваших кораблей. Лучший способ сделать это — рассредоточить свои корабли.
Сосредоточение всех ваших кораблей в одном сегменте иногда может быть эффективным — противник, стреляющий случайным образом, будет иметь меньше шансов поразить ваши корабли.
Тем не менее, эта стратегия очень рискованна, и противники могут легко ее поймать. Как только корабль будет поражен, противник начнет нацеливаться на тот же сегмент, чтобы потопить корабль. Если другие корабли будут сосредоточены в том же сегменте, это повысит их вероятность поражения.
Хотя вы можете использовать эту технику, чтобы оживить ситуацию, не делайте ее своей основной стратегией.
2. Избегайте размещения кораблей по одним и тем же шаблонамЕще одна эффективная стратегия защиты в Battleship — избегать использования одних и тех же шаблонов для размещения кораблей. Это особенно полезно, если вы играете с одними и теми же противниками, но может работать и со случайными противниками. Суть этой стратегии в том, что она позволяет свести к минимуму вероятность того, что противник угадает, где стоят ваши корабли.
Например, если вы разместите все свои корабли по диагонали, противник может уловить расположение ваших кораблей, как только они поразят несколько целей. То же самое касается размещения всех ваших кораблей вертикально.
Другая проблема с этой стратегией заключается в том, что она увеличивает вероятность попадания, если ваш противник стреляет случайным образом (что делает большинство людей!).
Вместо того, чтобы стрелять во все диагональные и вертикальные квадраты, пока вы не сделаете выстрел, используйте подход паритета, чтобы максимизировать шансы поразить корабль противника на ранней стадии.
Эта стратегия основана на математической вероятности и предположении, что противник не будет размещать все свои корабли точно по вертикальным линиям, на которые вы не нацелились.
Например, если самый маленький корабль покрывает две клетки, стрельба по каждой второй клетке увеличит ваши шансы на попадание в начале игры.
4. Не позволяйте двум кораблям соприкасаться друг с другом Всегда полезно держать свои корабли на расстоянии друг от друга, даже если это расстояние в одну клетку. Причина этого связана с тем, как большинство людей будут охотиться на корабли. Когда противник поражает корабль в Battleship, он обычно нацеливается на область рядом с местом удара.
Если вы поставите несколько кораблей рядом друг с другом, у вашего противника будет больше шансов получить больше последовательных попаданий. Даже если вы используете концентрированную стратегию, всегда держите по крайней мере расстояние или два между вашими кораблями.
5. Рассредоточьтесь заранееЭто самая распространенная стратегия Battleship, но также и одна из самых эффективных. Используйте подход, похожий на радар, при нацеливании на корабли противника в начале игры. Так как ваш противник редко будет концентрировать все свои корабли на одной части доски, эта стратегия обычно окупается.
Как только вы наткнулись на корабль, вы можете начать использовать вычисления, чтобы потопить его и рассчитать относительное положение других кораблей.
6. Топите по одному кораблю Как только вы попали в корабль противника, самое время воспользоваться своей удачей. Всегда сосредотачивайтесь на том, чтобы потопить один корабль, прежде чем двигаться к другим кораблям. Если вы попали в корабль, сосредоточьтесь на области вокруг корабля, пока вам не удастся полностью его потопить.
Как только вы потопите корабль, вы можете начать использовать ту же стратегию для поиска других кораблей. Хотя может показаться заманчивым сначала найти все корабли, а затем потопить их один за другим, это обычно приводит к путанице в том, попали ли вы в новый корабль или в один и тот же корабль дважды.
7. Не стреляйте в сегмент, если вы промахнулись дваждыЕсли вы дважды выстрелили в один сегмент, не получив попадания, переключитесь на другой сегмент. Дело не в том, что этот сегмент проклят, а в том, что это эффективная стратегия охоты на корабли на более поздних этапах игры!
Хотя вы можете очищать доску по одному сегменту за раз, эта стратегия не эффективна и только увеличит количество ваших выстрелов, прежде чем потопить все корабли противника.
8. Пожар в центре доски Рано Морской бой предназначен для получения максимального количества попаданий без лишних выстрелов. Большинство противников размещают свои корабли в центре доски. Некоторые люди предпочитают размещать большие корабли в центре, так как там больше места, а другие прячут самые маленькие.
В любом случае, ранний выстрел в центр увеличивает вероятность попадания.
9. Используйте метод шахматной доскиЭтот метод очень похож на метод четности, но гораздо проще в использовании. Представьте доску в виде шахматной доски с двумя разными цветовыми комбинациями. Даже если противник поставит свой самый маленький корабль вертикально, большинство кораблей будет иметь как минимум два цвета. Вместо того, чтобы нацеливаться на оба цвета, сосредоточьтесь на одном ряду, пропустите следующий ряд и выстрелите в следующий ряд.
10. Изменение начального поля для каждого выстрела Если вы хотите максимизировать количество попаданий, меняйте начальное поле для каждого выстрела. Например, если в предыдущей игре вы начали со стрельбы по B3, начните следующую игру с C4 и так далее. Противники каждый раз будут действовать по-разному, так что это повысит ваши шансы на попадание.
В то время как центр является отличным местом для укрытия небольших кораблей, размещение большого корабля в центре доски почти гарантирует, что противник ударит его на ранней стадии.
Большинство людей начинают с цели в центр доски. Разместив там свои самые большие корабли, вы даете противнику преимущество на раннем этапе.
12. Изучите стратегии вашего противника Если вы регулярно играете с одними и теми же противниками, вы будете постепенно изучать их стратегии. Затем вы можете противостоять этим стратегиям в своей игре. Например, если ваша первоначальная стратегия состоит в том, чтобы рассредоточить свои удары, но ваш противник склонен концентрировать большую часть своих кораблей в одном сегменте, тогда измените свою стратегию, чтобы она лучше соответствовала вашему противнику.
Хотя Морской бой основан в основном на удаче, есть способы получить преимущество с помощью расчетов. Например, вы можете рассчитать вероятность того, что большой корабль находится в определенной области, рассчитав количество оставшихся кораблей и их местонахождение.
Кроме того, как только вы получите удар, попытайтесь определить шаблоны, вокруг которых противник может строить свои построения.
14. Часто меняйте свою стратегиюНепредсказуемость имеет решающее значение для увеличения вашего винрейта в любой игре, особенно если вы регулярно играете с одними и теми же противниками. Если вы используете определенную стратегию, которую начинает улавливать противник, вы можете менять свою стратегию в любой другой игре, чтобы сбить его с толку.
15. Играйте чаще Есть известная поговорка: «Чем больше я тренируюсь, тем больше мне везет». Эта поговорка применима не только к играм, основанным на чистом мастерстве, но и может помочь вам победить в Battleship. Более регулярная игра поможет вам распознавать шаблоны и стратегии, обычно используемые другими игроками, и вам будет легче противостоять им.
Хотя для победы в Battleship требуется удача, он также основан на стратегии. Вот несколько важных советов, которые помогут вам чаще побеждать:
- Расставьте свои корабли более надежно.
- Нацеливайте свои выстрелы, используя радарную диаграмму.
- Будьте непредсказуемы, чтобы сбивать с толку обычных противников.
- Играйте чаще.
Морской бой | Море воров вики
в: Заглушки, Sea of Thieves Wiki
Английский
Посмотреть источникЭта статья незавершенная. Вы можете помочь Sea of Thieves Wiki, дополнив ее.
Морской бой в Sea of Thieves состоит из одной основной цели; потопить корабль противника. Морской бой является основополагающим для боя «Игрок против игрока» (PVP) в Sea of Thieves и в значительной степени зависит от маневрирования корабля и правильного использования пушек.
- 1 Морская боевая система
- 1.1 Правонарушение
- 1.2 Защита
- 1.3 Посадка
Морская боевая система
Наступление
- Основная цель победы в морском бою — потопить корабль противника. Это достигается путем пробивания корпуса вражеского корабля, в результате чего он попадает в воду и в конечном итоге тонет. Самый простой способ сделать это — использовать свои пушки, заряжая их пушечными ядрами и стреляя по вражеским кораблям. Чтобы максимизировать урон корабля, вы должны целиться в корпус или в ватерлинию или ниже, чтобы нанести ущерб, который позволит воде попасть внутрь.
- Когда ваши паруса подняты во время артиллерийского боя, вам будет намного легче прицеливаться, но это также сделает вас легкой мишенью.
- Еще один способ потопить вражеский корабль — нести бочки со взрывчаткой, подкрасться к вражескому кораблю, сбросить его и выстрелить, чтобы он взорвался. В качестве альтернативы подожгите предохранитель, бросьте его и убегайте, прежде чем он взорвется. Это наносит большой урон вражескому кораблю и может привести к его затоплению, если вам удастся убить и вражеских пиратов.
- Последний способ потопить вражеский корабль — вызвать столкновение. Это можно сделать, врезавшись своим кораблем в их корабль, но это приведет к повреждению вашего собственного корабля. Вы также можете попытаться ущипнуть его, если вам удастся поместить вражеский корабль между вашим кораблем и скалами в море. Таким образом, им в конечном итоге придется столкнуться с любым из них, если вы правильно расположитесь, что повредит их корпус.
- Убийство пассажиров корабля значительно упрощает потопление корабля, так как дает вам свободное время, чтобы делать все, что вы хотите. Вы также можете взять под контроль их корабль и разбить его или бросить якорь, чтобы сделать его легкой мишенью.
- Если вам удастся потопить корабль, все сокровища на борту всплывут на поверхность воды, и вы сможете перенести их на борт собственного корабля. Эти сокровища можно продать соответствующей фракции, как и любые другие сокровища, полученные в путешествиях.
- Вы можете получить преимущество, используя проклятые ядра. Это позволит вам получить особые преимущества, например, бросить якорь ваших врагов или заставить их танцевать.
- Зажигательные бомбы полезны в ситуациях, когда вражеский корабль уже выведен из строя, так как огонь, который они вызывают, нанесет урон вражеским игрокам и кораблю, включая мачты, кабестан и штурвал. Их можно стрелять из пушек или бросать вручную.
- В большинстве случаев опытная команда быстро справится с тушением пожара, а если вы сражаетесь во время шторма, любой пожар будет немедленно потушен, что снизит эффективность зажигательных бомб.
- В долгосрочной перспективе зажигательные бомбы лучше всего использовать в местах, где экипаж не заметит, например, в каюте капитана галеона, потому что огонь будет распространяться быстрее, если он уже распространился хотя бы один раз.
- В краткосрочной перспективе зажигательные бомбы лучше всего использовать на колесе или кабестане, где пламя будет препятствовать взаимодействию противника с ними до тех пор, пока огонь не будет потушен и не создаст брешь, где противник не будет управлять или не захочет сразу поднять якорь. .
- Мушкеты также можно использовать в морском бою, но они не очень эффективны, так как вражеские пираты могут прятаться под палубой и чаще всего не получают слишком много урона. Однако они могут сбивать корабли с курса, если попадут в корпус.
- Цепной выстрел чрезвычайно полезен в морском бою, так как он может уничтожить мачту, кабестан или колесо одним выстрелом. Однако они не нанесут слишком много урона кораблям и игрокам. Цепной выстрел можно использовать в сочетании с мушкетонами, чтобы сломать мачту противника и помешать ему починить ее, или такелажными шарами, чтобы полностью помешать им поднять мачту, пока эффект не исчезнет.
Оборона
- Защищаясь от пиратских нападений, вы должны уделять большое внимание управлению своим кораблем.
Если вы плывете в одиночку, вам придется иметь быстрые рефлексы, так как вы должны обращать внимание как на вражеский корабль, так и на пушечные ядра.
- Всегда следите за лестницами на предмет пиратов, пытающихся проникнуть на ваш корабль с пороховой бочкой. Кроме того, вылезание из воды по корабельному трапу будет сопровождаться отчетливым звуком всплеска; научиться слушать и распознавать этот шум может дать вам решающее упреждающее преимущество перед вашими врагами, поскольку они также будут наиболее уязвимы при подъеме по лестнице.
- Следите за русалками в воде рядом с вашим кораблем; это может означать, что вражеский игрок плывет к вашему кораблю или прячется в воде, ожидая возможности взять его на абордаж.
- Сокрытие — это метод, состоящий в том, чтобы пробраться на корабль (обычно, когда Экипаж находится вдали от своего корабля или занят) и спрятаться на борту, чаще всего лежа на земле с помощью эмоции Сон . Такеры часто прячутся и ждут на вражеском корабле возможности нанести удар по команде, пока они наиболее уязвимы, или собрать информацию для остальной части своей команды.
Если вы подозреваете, что на вашем корабле может скрываться безбилетный пассажир, проверьте все потенциальные укрытия (например, за мебелью или вороньим гнездом), направив на них свой абордажный абордаж, чтобы заставить таккеров раскрыться).
- Самый важный элемент — убедиться, что вы не принимаете воду. Если ваш корабль подбит, вы получите дыру в корпусе, которую нужно закрыть деревянными досками, которые можно найти на складе вашего корабля. Вы также можете использовать свое ведро, чтобы набрать воду внутри вашего корабля и выбросить ее за борт, чтобы она не заполнила ваш корабль. При этом следите за тем, чтобы вражеские пираты не попали на борт вашего корабля .
- Если вы решите бежать с вражеского корабля, вы можете попытаться сбросить его, взяв взрывную бочку; поджечь фитиль и сбросить его за борт корабля возле трапов либо с левого (слева), либо с правого (справа) борта. Если вражеский корабль находится достаточно близко, и вы правильно рассчитали время, бочка может взорваться рядом с их кораблем, нанеся приличный урон.
Вы также можете бросить незажженную бочку со взрывчаткой в воду, и если вражеский корабль ударит по ней, она взорвется, нанеся урон вражескому кораблю. Любой из этих вещей может быть достаточно, чтобы вы убежали, или достаточно риска для вашего агрессора, что вы не стоите для него хлопот. Это может помочь иметь несколько взрывоопасных бочек на вашем корабле, но это также чрезвычайно рискованно, так как они могут быть легко использованы другими пиратами. Храните их на своем корабле на свой страх и риск.
- Всегда помните, что шлюпы быстрее против ветра, чем другие типы кораблей, поэтому, если вы решите бежать от бригантины или галеона, идите по ветру, а не по ветру.
Абордаж
- Абордаж — обычное дело для опытного пирата, но для начинающего моряка это может быть непросто. Хотя это и не обязательно для победы в морском сражении, абордаж может помочь вам получить преимущество и сократить продолжительность боя. Однако, если вы провалите доску, вы окажетесь в невыгодном положении, поскольку вас не будет на вашем корабле.
- Абордаж может иметь несколько целей: помешать противнику использовать свои пушки, контролировать свой корабль или помешать ему ремонтироваться.
- Есть три распространенных способа попасть на корабль:
- Самый распространенный вариант — расположиться на носу своего корабля, чтобы поразить вражеский корабль и прыгнуть в него. Помимо того, что вы можете приблизиться к нему, эта техника также позволяет вам пробить корпус вражеского корабля. Однако вы должны быть осторожны, садясь таким образом, так как ваша лодка также получит повреждения и может затонуть. Если он у вас есть, ваш товарищ по команде может позаботиться о ремонте.
- Второй способ — спрыгнуть в воду и схватиться за трап вражеского корабля. Однако этот маневр заметен противнику, который помешает вам пройти на абордаж. Чаще всего его используют, если вас преследуют, чтобы бросить якорь вражеского корабля, чтобы спастись.
- Последний прием — пуск пушки. Некоторые считают его наиболее эффективным методом абордажа, поскольку он обеспечивает эффект неожиданности, но за счет того, что его сложнее всего реализовать.
Запустить себя из пушки сложно по двум причинам: и ваша лодка, и лодка противника постоянно двигаются, и попав в ствол пушки, невозможно прицелиться. Однако это можно легко сделать под определенными углами: сзади, целясь в мачты или каюту капитана на галеоне (приземляясь на балкон), или спереди, целясь в каюту капитана.
- А что ты делаешь на борту? Что бы вы ни предпочли: бросив якорь, вы остановите корабль, пираты, управляющие пушками, станут легкой мишенью, если противник не сможет починить, его корабль может легко затонуть и т. д.
- Для успешного абордажа вам следует сосредоточиться на оружии ближнего боя и отбрасывании (кортик и мушкетон, которые также проще всего использовать). Это оружие позволит вам наносить большой урон, а также отталкивать ваших противников от вас или за пределы корабля. Используйте различные элементы лодки (мачты, бриг, лестницы и т. д.) в качестве укрытия для восстановления здоровья или перезарядки.
- Опытные пираты распознают, когда вы пытаетесь подняться на борт.
Либо услышав плеск своего купания, либо увидев русалку в воде. Если вас заметили, враг обычно будет ждать у лестницы под прицелом, пытаясь вас отстрелить. Оставайтесь у основания лестницы. В случае, если они выстрелят и промахнутся, быстро заберитесь на борт, чтобы воспользоваться их перезарядкой.
- Подняться на борт с пороховой бочкой — идеальный способ потопить врага. Однако эта стратегия рискованна из-за того, что бочонок замедляет вас, и если вы выстрелите в него, вы умрете. Для этого существует множество стратегий.
- Один из способов — поджечь бочонок, пока вы поднимаетесь по лестнице, и просто остаться на лестнице и позволить ему взорваться. Это приведет к вашей смерти, но бочонок взорвется.
- Можно запрыгнуть на борт и зажечь бочонок, когда вы садитесь на корабль. Если его быстро уронить, он взорвется, и вы, возможно, выживете. Однако имейте в виду, что враг может схватить бочонок и погасить фитиль, не дав ему взорваться.
- Бочонок, который вы используете, может нанести разную степень повреждений.