Искусственный интеллект для игры в крестики-нолики

Рейтинг: 1Ответов: 2Опубликовано: 29.05.2011

Я ещё нуб в делфи, я хочу создать ИИ (искусственный интеллект) для игры крестики-нолики, что бы ИИ мог запоминать тактику противника и в следующий раз смог сыграть вничью или даже победить противника!

Ответы

▲ 3

самый простой ИИ глубиной 2 хода (сгодится для любой подобной игры): сперва пишем функцию, которая проверяет, есть ли выигрышная ситуация на доске (3 подряд крестика или нолика)

делаем неполный перебор, глубиной в 2 хода:

  1. цикл по всем возможным ходам (проверяем - если выигрышная ситуация - делаем этот ход и выходим из цикла - ура, мы выиграли!).
  2. вложенный цикл по всем возможным ходам противника (если в результате хода противника у него получается выигрышная ситуация, то отмечаем этот ход как плохой и сразу переходим к следующей итерации цикла 1.)

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

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

в случае игры крестики-нолики (3х3) сколько порождает линий с 2 крестиками. для эого просто написать еще функцию.

Насколько помню игру крестики-нолики, единственный серьезный вариант выиграть - сделать "вилку". Это такой ход, когда получается 2 линии с 2 крестиками, причем противник не может перекрыть их одним ноликом.

Проверить, получилась ли "вилка", никаких проблем нет.


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

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

Победить такого компьютерного противника было очень не просто.