Cross 2 - Крестики-Нолики "5 в ряд"

Это - игра Крестики-Нолики, написанная под DOS с помощью компилятора DJGPP. В игре могут играть два человека за одним компьютером, человек с компьютером и два компьютера.

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

Загружать здесь: cross2.zip

Эта программа для своей работы требует игровую библиотеку Allegro

Мной разработаны и другие версии крестиков ноликов.

Описание

Эта программа обладает искусственным интеллектом. Она рекурсивно прогнозирует результаты своих ходов и ходов противника, выбирая лучшие ходы для себя и полагаясь на то, что противник выберет самый плохой для нас вариант. Глубина рекурсивного спуска регулируется параметром Depth в файле cross.cfg. Чем больше, тем сильнее играет [должен играть] компьютер, но тем и тормознее. Если вы хотите понаблюдать за "ходом мысли" компьютера, поставьте параметр ShowThink = 1. Можно понаблюдать за ходом игры двух компьютеров - в секции Players установите параметр 1 = 0.

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

Трики будут сохраняться как описания игрового поля, и куда при этом можно ставить свои значки (с весами).

Формат базы триков:

Начало трика задается командой trick, конец командой end.
Примечание: в начале значение сумматора равно 1

trick <важность> <сравнение>
Задает начало трика.
<важность> - важность (aka полезность) трика. Чем больше, тем важнее.
<сравнение> - если сумматор больше этого числа, то трик считается выполненным

Команды управления триком:

requirement <что> <x> <y> <множитель ДА> <множитель НЕТ>
Требование к состоянию определенной ячейки.
<что> - это число, обозначающее состояние ячейки (0-пусто 1-мое 2-врага)
<x> и <y> - координаты ячейки относительно центра трика
<множитель ДА> - на сколько умножить сумматор при выполнении условия
<множитель НЕТ> - на сколько умножить сумматор при невыполнении его же

action <x> <y>
Что можно сделать для ликвидации трика.
<x> и <y> - координаты клетки, куда надо что-то поставить

Для максимальной скорости обработки, требования к наличию значков должны располагаться перед требованиями к отсутствию оных, трики должны иметь наименьший радиус (расстояние требований до (0, 0))

Идеи по перехвату триков.

Как только AI проигрывает, надо сделать обратное отслеживание ходов противника, определить, какие из его значков приняли участие в трике, предсказать свои возможные реакции на его действия, чтобы предотвратить действие трика, и таким образом выявить точнее, какие значки надо записать в условие трика. А может просто выкидывать постепенно значки и смотреть на свои возможные реакции. И как окажется, что тогда противодействие свелось бы к уже существующим трикам, так все, этот значок активный. А если уж свелось, то повысить приоритет тех триков. Тогда имеет смысл научить AI самому "с нуля" определять и стандартные комбинации, вроде это вписывается в модель.

Надо еще уметь корректировать распознавалку триков. То есть если трик распознался, но он очень похож на один из существующих, то попытаться скорректировать его. Может вообще хранить базу со статистикой по играм и искать у похожих триков общие части?

Можно сделать тактику "блокирования", при которой компьютер будет стараться не допустить реализацию триков со стороны противника.



Вернуться на главную страницу

100% MS Free Rambler's Top100 Мониторинг сервера осуществляется системой UpTime.Ru
Best viewed with Lynx