Гомоку или Пять в ряд - настольная игра, в которую играют два игрока на сетке с черными и белыми камнями. Тот, кто может разместить 5 камней подряд (по горизонтали, вертикали или диагонали), выигрывает игру.
правила
В этом KoTH мы будем играть в правило Swap2, означающее, что игра состоит из двух этапов: на начальном этапе два игрока определяют, кто идет первым / кто играет черными, после чего они будут ставить один камень каждый раунд, начиная с игрока кто выбрал черный.
Начальный этап
Пусть игроки будут A & B, и A откроет игру:
- Помещает два черных и один белый камень на доске
- B может выбрать один из следующих трех ходов:
- игрок B решает сыграть черным: начальная фаза окончена
- игрок B решает поместить белый камень и играет белым: начальная фаза окончена
- игрок B решает сыграть один черный и один белый камень: A выбирает цвет
Фаза игры
Каждый игрок кладет один камень своего цвета на игровое поле, начиная с игрока, который играет черным, это продолжается до тех пор, пока не останется свободного места для игры (в этом случае это ничья), или одному игроку удастся сыграть камней в игре. ряд (в этом случае тот игрок выигрывает).
Ряд означает горизонтальный, вертикальный или диагональный. Победа - это победа - не имеет значения, сумел ли игрок забить более одного ряда.
Правила игры KoTH
- каждый игрок играет друг против друга дважды:
- Первоначально будет случайным образом решено, кто идет первым
- в следующей игре игрок, который должен играть последним, идет первым
- выигрыш стоит 2 очка, ничья 1 и проигрыш 0
- цель - набрать как можно больше очков
Ваш бот
Чтобы сделать эту задачу доступной для максимально возможного количества языков, ввод / вывод будет осуществляться через stdin / stdout (на основе строки). Программа судья предложит программу, печатая строку для вашего бота стандартного ввода и бота напечатает одну строку в стандартный вывод .
Как только вы получите EXIT
сообщение, вам дается полсекунды, чтобы завершить запись в файлы, прежде чем судья завершит процесс.
хаотичность
Чтобы сделать турниры проверяемыми, судья использует случайную рандомизацию, и ваш бот должен сделать то же самое по той же причине. Бот получит семя через аргумент командной строки, который он должен использовать, пожалуйста, обратитесь к следующему разделу.
аргументы
Бот получает два аргумента командной строки:
- имя оппонента
- семя для случайности
Состояние пользователя
Поскольку ваша программа всегда будет запускаться новой для каждой игры, вам нужно будет использовать файлы для сохранения любой информации, которую вы хотите сохранить. Вам разрешено читать / записывать любые файлы или создавать / удалять подпапки в вашем текущем каталоге. Вам не разрешен доступ к файлам в любом родительском каталоге!
Формат ввода / вывода
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
На начальном этапе существует три вида сообщений:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Первое сообщение запрашивает три кортежа, первые два будут позициями черных камней, а третье позицией белых.
- Второе сообщение запрашивает либо:
"B"
-> выбрать черный"W" SP XY
-> выберите белый и поместите белый камень вXY
XY XY
-> поместите два камня (первый черный и второй белый)
- Последний просто спрашивает, какой цвет вы хотите играть
После этого начнется обычная игра, и сообщения станут намного проще
N BOARD -> XY
N
XY
Есть одно дополнительное сообщение, которое не ожидает ответа
"EXIT" SP NAME | "EXIT TIE"
где NAME
имя бота, который выиграл Второе сообщение будет отправлено, если игра закончится из-за того, что никто не выиграл, и больше нет свободных мест для размещения камней (это означает, что ваш бот не может быть назван TIE
).
Форматирование
Поскольку сообщения от бота могут быть декодированы без пробелов, все пробелы будут игнорироваться (например, (0 , 0) (0,12)
обрабатываются так же, как (0,0)(0,12)
). Сообщения от судьи содержат только пробел для разделения различных разделов (то есть, как отмечено выше с помощью SP
), что позволяет разбить строку на пробелы.
Любой неверный ответ приведет к потере этого раунда (вы все равно получите EXIT
сообщение), см. Правила.
пример
Вот несколько примеров реальных сообщений:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
судья
Вы можете найти программу судьи здесь : чтобы добавить в нее бота, просто создайте новую папку в bots
папке, поместите туда свои файлы и добавьте файл, meta
содержащий имя , команду , аргументы и флаг 0/1 (отключить / включить stderr ) каждый на отдельной строке.
Чтобы запустить турнир, просто запустите ./gomoku
и отладьте один бот-запуск ./gomoku -d BOT
.
Примечание: вы можете найти больше информации о том, как настроить и использовать судью в репозитории Github. Есть также три примера ботов ( Haskell , Python и JavaScript ).
правила
- при каждой смене бота * турнир будет повторяться, и игрок с наибольшим количеством очков выигрывает (тай-брейк - первая подача)
- Вы можете отправить более одного бота, если они не играют общей стратегии
- вам не разрешается трогать файлы за пределами вашего каталога (например, манипулировать файлами других игроков)
- если ваш бот вылетает или отправляет неверный ответ, текущая игра прекращается, и вы проигрываете этот раунд
- хотя судья (в настоящее время) не применяет ограничение по времени на раунд, рекомендуется сократить время, затрачиваемое на проверку, поскольку проверка всех представлений может оказаться невозможной **
- злоупотребление ошибками в программе судьи считается лазейкой
* Рекомендуется использовать Github для отдельной отправки вашего бота непосредственно в bots
каталог (и, возможно, его изменения util.sh
)!
** Если это станет проблемой, о которой вы будете уведомлены, я бы сказал, что все, что ниже 500 мс (это очень много!) Должно быть хорошо на данный момент.
Чат
Если у вас есть вопросы или вы хотите , чтобы говорить об этом KOTH, не стесняйтесь присоединиться к чат !
Ответы:
KaitoBot
Он использует очень грубую реализацию принципов MiniMax. Глубина поиска также очень мала, потому что в противном случае это займет слишком много времени.
Могу редактировать, чтобы улучшить позже.
Он также пытается играть черными, если это возможно, потому что Википедия, кажется, говорит, что у черных есть преимущество.
Я никогда не играл в Гомоку сам, поэтому я выставил первые три камня случайным образом из-за отсутствия лучшей идеи.
РЕДАКТИРОВАТЬ: Сделано изменение семени динамически, потому что в противном случае, когда семена превысили 2 ^ 52, JavaScript не смог бы правильно обработать приращение
источник