Это шахматный KOTH с упрощенными правилами (поскольку сами шахматы уже сложны, играть в них с помощью простой программы не облегчает). На данный момент он ограничен Java (версия 8), но создать класс-оболочку не так сложно (на случай, если кто-то захочет это сделать).
шахматная доска
На шахматной доске в управляющей программе используется модифицированная версия числовой записи ICCF . Он начинается с нуля, то есть нижнее левое поле - это позиция 0,0
, а правое верхнее поле - это позиция 7,7
.
Измененные правила
- En passant будет игнорироваться.
- Рокировка невозможна.
- Правило Пятьдесят шаг применяется автоматически ( это означает , игра заканчивается вничью).
- Продвижение пешек на ферзей происходит автоматически, когда они достигают конца доски.
- Если игроку требуется больше 2 секунд для движения, он проигрывает игру.
- Возвращение неверного хода приведет к проигрышу.
- Чтобы победить, вы должны захватить вражеского короля . Недостаточно поставить мат врагу.
- Это также позволяет вам перемещать своего короля в поля, где враг может захватить вас.
- Белые начинают игру.
- Белый помещается «внизу» поля (y = 0), черный - вверху (y = 7).
- Доступ к другим ресурсам, кроме вашего бота (интернет, файлы, другие боты, ...) запрещен.
счет
- Выигрыш дает вам 3 очка, ничья 1 очко и потеря 0 очков.
- Каждое представление будет играть друг против друга 10 раз (5 раз как белый, 5 как черный).
контроллер
Вы можете найти управляющую программу на github .
Чтобы принять участие, вы должны создать класс внутриplayer
пакета, и он должен быть подклассомPlayer
. В качестве примера рассмотрим TestPlayer (который также будет включен в оценку).
В каждой игре контроллер будет создавать новый экземпляр вашего игрока. Затем каждый ход вы должны вернуть ход. Контроллер предоставляет вам копию платы , которая содержит массив полей 8х8 . Поле содержит информацию о его цвете, его положении и части на нем, если таковой имеется.
Контроллер также предоставляет вам информацию о вражеском игроке, например, isCheck
и getPieces()
. Вызов getMove()
противника приведет к дисквалификации.
Табло
01) AlphaBetaPV: 229 02) АльфаБета: 218 03) PieceTaker: 173 04) Сыр: 115 05) ThreeMoveMonte: 114 06) StretchPlayer: 93 07) DontThinkAhead: 81 08) SimplePlayer: 27 09) TestPlayer: 13
Соревнование ограничено java, потому что оно облегчает создание ответов, так как вы можете воспользоваться методами, предоставленными контроллером. Однако, если кто-то создаст оболочку, я включу другие языки.
источник
you can profit from the methods provided by the controller
: Это не все, что правда. Большинство полезных методов являются приватными, поэтому их нельзя использовать. Не могли бы вы добавитьsimulateMove
метод кBoard
классу, который возвращает глубокую копию доски с примененным ходом? Таким образом, нам не нужно писать это самостоятельно (или копировать и вставлять весь ваш код ^^).public
теперь;)Throwable
или даже,Error
так как это позволит избежать проигрыша. Я бы назвал это BoardTipper.Ответы:
AlphaBetaPV
AlphaBetaPV означает альфа-бета с основным изменением (это не поиск основного варианта). Поскольку в код AlphaBeta.java вплетено всего несколько строк, он превосходит AlphaBeta.java. И еще раз, извините, за то, что в этот код JAVA меняются только коды и коды из других интернет-источников.
Все еще играет скучно.
источник
PieceTaker
Код немного беспорядок, но он работает. Прямо сейчас он выигрывает у всех других игроков, даже если ему дается только 400 мс вместо разрешенных 2000 мс.
Я использую альфа-бета-обрезку с итеративным углублением, чтобы гарантировать, что ИИ не превысит ограничение по времени. Текущая эвристика очень проста (учитываются только потерянные / взятые фигуры; не положение на доске и т. Д.).
В будущем я мог бы также добавить убийственную эвристику и отсортировать ходы, прежде чем исследовать их.
источник
StretchPlayer
Этот бот играет так же, как я!
Кстати, я ужасен в шахматах.
Комментарии объясняют, что он на самом деле делает. Это очень похоже на мой мыслительный процесс.
В качестве дополнительного бонуса бьет всех остальных ботов со значительным отрывом. (до сих пор)
РЕДАКТИРОВАТЬ: теперь предсказывает противника, выдавая себя за врага!
РЕДАКТИРОВАТЬ 2: Программа совершила ошибку, фактически не убивая короля, когда он был широко открыт. Это было сделано выговор соответственно.
источник
Три хода Монте
Этот парень смотрит на следующие три хода (мой, твой, мой) и выбирает ход, который дает самый высокий балл. Если доступно более 60 ходов, он просто выберет 60 случайных на каждом шаге. Конечно, если какой-либо один ход (из всех, а не из выбранных 60) завершит игру, я немедленно его возьму.
Чтобы забить доску, я даю каждому элементу базовое значение. Затем он изменяется подвижностью фигуры, скольким (и каким) фигурам она угрожает, и сколько фигур угрожает ей.
Конечно, мобильные короли не всегда хороши в ранней игре, поэтому я немного разбираюсь в их значениях.
Это выполняется довольно быстро и может закончить игру с текущим урожаем за 3-4 секунды. Похоже, есть место, чтобы поднять его пару ходов, если это будет необходимо.
Обновить:
источник
color.opposite()
вместоgetOpponent()
;)AlphaBeta
Извините, за то, что в этот код JAVA добавлен только код из других источников в Интернете. Но это побеждает всех других противников (включая PieceMaker) ... пока.
И извините, за игру так машина скучная.
источник
Не ответ, а симуляция, чтобы помочь
Я добавил новый класс: GamePanel и отредактировал Game and Controller.
Это не очень красиво ... пока.Знаете ли вы, что в Юникоде есть шахматные символы!?!? (просто восхитительно!)Кстати, вам нужен UTF-8 для показа этих персонажей. Он работал для меня, но не уверен, как это будет работать на других операционных системах.
Исправлена ошибка конца игры (спасибо Тиму за указание на это).
GamePanel:
Игра:
контроллер:
источник
SimulationListener
, и если игр больше нет, выдается исключение. И я бы поставил белый внизу, но я думаю, что ваш путь тоже работает :)DontThinkAhead
Этот «ИИ» не любит думать заранее. Если он видит, что может поймать вражескую фигуру, он сделает это немедленно. Если он не может, он просто переместит фигуру наугад.
Это немного лучше, чем,
SimplePlayer
иTestPlayer
я в основном написал это, чтобы почувствовать код контроллера и иметь что-то для тестирования.источник
Сыр
Да, вы правильно прочитали. Блок сыра, игра в шахматы.
Алгоритм
Сыр проверяет все возможные ходы и оценивает их соответственно. Он (сыр, и да, это мужчина) использует следующее руководство для оценки своего выбора:
принимать пищу
Риск быть съеденным
Вероятность съесть следующий ход
Ожидающие улучшения
Исправлены ошибки
источник
SimplePlayer
Этот игрок просто гарантирует, что он использует правильные ходы, но в остальном он довольно глуп.
источник