![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
YahоО |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: 1 Всего: 1 |
Написал игру морской бой http://visiotxt.myartsonline.com/game/ (зацените).
Игра проходит в трех вариантах "интеллекта", в большинстве случаев в ней компьютер выигрывает у человека-игрока, но и человек может выиграть у компьютера, что в общем то не удивительно. Для игры крестики нолики есть прекрасный алгоритм minimax, обеспечивающий максимальную эффективность компьютерного противника, у которого человек практически никогда не выиграет, а лучшем случае будет ничья. Вопрос такой, можно ли переделать/создать алгоритм минимакс применительно для игры в морской бой? Если такое невозможно, то может ли тогда ИИ решить задачу в пользу компьютера, чтобы в любом случае у человека-игрока выигрывал всегда компьютер? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
минимакс подходит для игры с открытыми данными, шахматы, например. Для игр с закрытыми картами нужно другое
А где в игрушке написано, что "корабль убит" ? Как-то неочевидно, что этот выстрел последний и добивать уже некого. Наиболее эффективная методика расстановки - все корабли, кроме 1-2х однопалубных, выставить вдоль одной из стен. И неважно, что противник про это знает и выбивает весь балласт одним ходом - все равно остается достаточно свободных клеток для маневра. Одна из наиболее эффективных атакующих тактик - диагональные полоски с шагом 4. Когда ей выбивается 4-х палубный, переключаемся на заполнение промежутков полосок - выбиваетм всех 3 и 2-х палубных. Потом как повезет - убиваем однопалубные Это сообщение отредактировал(а) ksnk - 12.1.2021, 17:02 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Ну и чтобы компьютер выигрывал "всегда", можно совместить "победную" расстановку с читом - ставим последний корабль, когда свободных клеток для стрельбы осталось не более 5 штук.
![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
YahоО |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: 1 Всего: 1 |
Сделать так несложно, но это будет уже явная подсказка игроку. Так как сейчас сделано в данной игре приходится делать лишние выстрелы, чтобы понять убил или только ранил кораблик противника, а лишний ход дает больше шансов противнику, будь то человек или же это компьютер. Равные все же права, все по чесноку )) Про расстановку, сейчас функция расстановки использует случайные числа для определения места любой клеточки для расположения каждого кораблика, и отдельно выбирает вертикальный или горизонтальный вариант. Можно конечно задать условие чтобы расстановка больших велась вдоль стен, какая при этом будет вероятность расстрела беглым огнем всех больших кораблей, должно быть это только облегчит задачу первичного поиска, дальнейший поиск одноклеточных - тут конечно вероятность попасть уменьшится в разы, наверное. Ага, я тоже сначала делал честный "ум", а в третьем режиме тоже добавил подтасовку, Вы могли это заметить по количеству пустых выстрелов в начале игры, когда комп сам то попадает и набирает очки, но свои скрытые кораблики при каждом выстреле человека в тайне от него скрытно уводит из под огня путем подбирания варианта полной новой расстановки всей свое позиции всех корабликов, пока таких вариантов уже не остается он переходит к честной игре. Но тут выявляется такая особенность, что стреляя в свободные клетки до первого попадания раз 15-20 мимо, зато потом очень легко даже выиграть у компьютера, так как такая рекогносцировка поля боя дает свои положительные сведения. Ваши 5 (или до последнего) выстрелов с переносом последнего кораблика это уже интересно, можно пробовать добавить. Спасибо! С минимаксом просветили, подтвердили мои смутные сомнения, а что по поводу ИИ? Скорее всего то же самое в части подбора оптимального выстрела, т.е. даже ИИ не справится лучше махлюющего алгоритма? Я уж думал что ИИ это вершина, а оказалось как всегда ![]() ![]() И снова про минимакс, красивый он, а у меня получился код далекий от краткости и изысканности... |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Мне кажется, что игроки обмениваются словами - промазал, попал, убил... Впрочем - ладно, если компьютер тоже играет так же, не подсматривая, то нормально ![]()
Расстановка всех кораблей, кроме 1 однопалубного вдоль стены, например сверху, занимает 4 строки. Для однопалубного остается 60 клеток - примерно 30 ходов до среднестатистического проигрыша, и чуть больше, если противник не убивает весь балласт одним ходом. Для 2-х однопалубных на 60 клетках для 50% проигрыша нужно еще больше, imho, ходов 35-40, хотя я что-то не силен теорвере и не смог на глаз посчитать вероятность - могу ошибиться... А если читить, то и все 55+. За это время любую "случайную" расстановку можно уже вскрыть, просто потому, что каждый убитый корабль выводит "из игры" несколько непрострелянных клеток. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |