В отличии от выше упомянутого поста, где только несколько скринов и видеоролик, постараюсь рассказать подробнее…
Наверное больше картинок не позволила бы цензура.
Описание
Поставленная цель это программа, которая вместо нас будет играть (и желательно выигрывать) в шашки против комп’ютера (режим «Девочки») или игрока (режим «Дуэль»). В принципе можно даже запустить две программы и пусть играют.
Для начала разберемся какие функциональные части у нас будут (приведены асоциации с реальным игроком, в спойлере — конкретнее):
-
Глаза — чтобы видеть поле какие фигуры на нем есть;Сначала была идея реализовать распознавание поля на базе OpenCV.
Отказались через требовательность к ресурсам, и избыточности. Теоретически можно было проверять несколько пикселей и получать более-менее верный результат.
Но, остановились на том что разбираем поле на отдельные квадраты
и сравниваем «сфотографированные» с этими.
После этого, передаем всю информацию в мозг. -
Игрок (с Мозгами) — начинает игру, смотрит какие ходы доступны (согласно правил);
Сдесь, на основе увиденной информации, ищем все доступные ходы, перебырая все шашки нашего цвета и проверяя можно ли сделать ход в соседние по-диагонали клетки.
Если соседняя пуста — туда можно сделать ход, если она занята фигурой противника, а следующая после нее (по диагонали) свободна — значит можно сделать удар. После этого возможность этого хода записывается в список доступных, и если нужно «ударить», то этот ход отмечается как приоритетный. -
Логика — принимает решения о выборе одного хода из списка доступных;Сейчас, реализована логика только для выбора сначала приоритетных ходов (где обязательно нужно ударить), а потом из всех остальных. Выбор делается произвольно. Если нужно ударить две или более просто вызываем метод еще раз. Во-второй части реализую более подходящий алгоритм. Для демонстрации и для того чтобы вииграть в данной версии игры этого хватило.
-
Руки — чтобы, собственно, делать ход.Здесь наверное, самый простой функционал. После того как был вибран ход, перемещается курсор в положение откуда взять фигуру, кликаем, перемещаем куда положить, и еще раз кликаем. Если нужно было ударить две, три или более, просто вызывается несколько раз.
Результат
Получилась программа которая умеет играть шашки в практически любой среде: онлайн-игра в браузере, программа как на фото или что-то еще. Только перед началом ее нужно будет обучить тому как выглядят фигуры и поле. Много еще нужно добавить, например:
- Возможность обработки дамок, чтобы они могли ходить не только как обычные шашки.
- Добавить логику выбора наиболее успешных ходов.
- Лучше обрабатывать завершение игры.
- Автоматически обучаться тому где находится поле и как оно выглядит.
Послесловие
Программа была написана вместе с другом (ждите скоро на хабре), за 3 часа. Прошу не кидаться ботинками, так как писали после рабочего дня и «just4fun». Приветствуются коментарии, замечания, предложения…
Завтра еще добавлю видео процесса игры.
Репозиторий на GitHub
ссылка на оригинал статьи http://habrahabr.ru/post/171277/
Добавить комментарий