| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Морской бой и минимакс |
| Автор: YahоО 12.1.2021, 16:14 |
| Написал игру морской бой http://visiotxt.myartsonline.com/game/ (зацените). Игра проходит в трех вариантах "интеллекта", в большинстве случаев в ней компьютер выигрывает у человека-игрока, но и человек может выиграть у компьютера, что в общем то не удивительно. Для игры крестики нолики есть прекрасный алгоритм minimax, обеспечивающий максимальную эффективность компьютерного противника, у которого человек практически никогда не выиграет, а лучшем случае будет ничья. Вопрос такой, можно ли переделать/создать алгоритм минимакс применительно для игры в морской бой? Если такое невозможно, то может ли тогда ИИ решить задачу в пользу компьютера, чтобы в любом случае у человека-игрока выигрывал всегда компьютер? |
| Автор: ksnk 12.1.2021, 16:50 |
| минимакс подходит для игры с открытыми данными, шахматы, например. Для игр с закрытыми картами нужно другое А где в игрушке написано, что "корабль убит" ? Как-то неочевидно, что этот выстрел последний и добивать уже некого. Наиболее эффективная методика расстановки - все корабли, кроме 1-2х однопалубных, выставить вдоль одной из стен. И неважно, что противник про это знает и выбивает весь балласт одним ходом - все равно остается достаточно свободных клеток для маневра. Одна из наиболее эффективных атакующих тактик - диагональные полоски с шагом 4. Когда ей выбивается 4-х палубный, переключаемся на заполнение промежутков полосок - выбиваетм всех 3 и 2-х палубных. Потом как повезет - убиваем однопалубные |
| Автор: ksnk 12.1.2021, 17:09 |
| Ну и чтобы компьютер выигрывал "всегда", можно совместить "победную" расстановку с читом - ставим последний корабль, когда свободных клеток для стрельбы осталось не более 5 штук. |
| Автор: ksnk 12.1.2021, 22:21 | ||
Мне кажется, что игроки обмениваются словами - промазал, попал, убил... Впрочем - ладно, если компьютер тоже играет так же, не подсматривая, то нормально
Расстановка всех кораблей, кроме 1 однопалубного вдоль стены, например сверху, занимает 4 строки. Для однопалубного остается 60 клеток - примерно 30 ходов до среднестатистического проигрыша, и чуть больше, если противник не убивает весь балласт одним ходом. Для 2-х однопалубных на 60 клетках для 50% проигрыша нужно еще больше, imho, ходов 35-40, хотя я что-то не силен теорвере и не смог на глаз посчитать вероятность - могу ошибиться... А если читить, то и все 55+. За это время любую "случайную" расстановку можно уже вскрыть, просто потому, что каждый убитый корабль выводит "из игры" несколько непрострелянных клеток. |