P-O-I-N-T-S-----B-A-T-T-L-E
Points Battle - графическая оболочка предназначеная для проведения игр в "точки" между:
- разными ИИ;
- человека против ИИ;
- человек сам с собой.
Ограничения первой версии
- Игра всегда идет на поле 32x39;
- Перед каждым ходом добавляется по 10 секунд;
- Неудобно подключать модули ИИ.
Это всего лишь первая версия. Мне просто интересно найдутся ли люди, которые будут
заниматься программированием ИИ для точек. Если найдется хотя бы парочка человек, то я
продолжу развивать как ИИ, так и графическую оболочку. Если нет, то вряд ли мне будет
интересно заниматься этим в одиночестве.
Что означает инормация в полях строки статуса
- Название модуля ИИ играющего красными (или "Игрок", если играет человек).
- Время оставшееся у красных.
- Название модуля ИИ играющего синими (или "Игрок", если играет человек).
- Время оставшееся у синих.
- Текущий счет (с точки зрения красных).
- Информация выводимая модулем ИИ.
Подключение/отключение модулей ИИ
Для подключения модуля ИИ для игры красными его необходимо переименовать в engine1.exe.
Для подключения модуля ИИ для игры красными его необходимо переименовать в engine2.exe.
Для отключения просто переименовать как-нибудь иначе.
Модуль ИИ "BlindSubmission"
Написан мной. Для начала была цель написать что-то, что хоть как-то умеет тыкать точки
в пересечения линий поля. Но есть много идей по совершенсвованию. Хотя, в данный момент,
не видно как его поднять до уровня человека. Но ведь для того, чтобы что-то сделать нужно
пытаться, а не сидеть и горевать о том как это сложно. Стиль игры полностью соответствует
названию. За 10 секунд успевает просчитать на 5-6 полуходов.
Модуль ИИ "SiPo"
Распространяется вместе с исходниками. Написан специально для демонстрации того, как
реализовать поддержку протокола. Кроме того, можно узнать другие полезные вещи:
- представление поля в виде одномерного массива;
- полный перебор "активных" ходов (минимакс);
- алгоритм определения замкнутых контуров;
- итеративное углубление;
- прекращение перебора по лимиту времени.
Описание протокола модуля ИИ
Модуль ИИ представляет собой обычное приложение, которое считывает команды
со стандартного устройства ввода (для Си это stdin) и выводит на стандартное
устройство вывода (stdout).
Модуль ИИ должен уметь обрабатывать следующие команды:
- quit - Выход.
- new N M - Новая игра на поле из N горизонтальных линий M вертикальных.
- increment I - Сколько секунд добавляется перед каждым ходом.
- move X Y - Поставить точку на пересечение линий: X номер вертикальной линии, Y - горизонтальной. Нечетные точки - красные. Четные - синие.
- go - Подумать и сделать ход. Чтобы сделать ход нужно вывести "move X Y".
- time T - Время оставшееся на часах. Эта команда посылается перед каждой командой "go".
- otime T - Время оставшееся на часах соперника. Тоже посылается перед каждой командой "go".
Важные замечания
- Первая выводимая модулем строка считается его именем.
- Последняя выведенная модулем ИИ строка отображается в строке статуса. Исключениями являются строка имени и строка с ходом, который делает ИИ.
- Все команды и ответы ИИ должны завершаться переводом строки.
- Сразу после запуска модуль ИИ должен отключить буферизацию ввода/вывода. Т.к. иначе он не сможет нормально общаться с графической оболочкой.
На Си это делается так:
setbuf(stdout, 0);
setbuf(stdin, 0);
На Си++:
cout.rdbuf()->setbuf(NULL, 0);
cin.rdbuf()->setbuf(NULL, 0);
Пример модуля ИИ (SiPo) можно найти в каталоге SiPo_src.
Мыло.
На первое письмо отвечает система антиспама. Следуйте инструкциям в этом письме.