https://en.wikipedia.org/wiki/Losing_chess
Це в основному шаховий турнір , але для антихеси;)
Антихема - один із багатьох варіантів шахів , які були винайдені. Мета полягає в тому, щоб втратити всі свої шматки (це може здатися дивним, але це називається антихесою чомусь).
Правила
Правила антихеси дуже схожі на стандартні шахи, але з кількома досить незначними відмінностями. Як я вже згадував, ціль, як я вже згадував, - втратити всі свої шматки. Щоб це сталося, якщо ваш опонент має можливість захопити один із ваших творів, це єдиний хід, який він може зробити. Якщо ви даєте йому кілька шансів за один хід, інший гравець може вибрати свою чергу. Ще одна річ, яка зміниться - це те, що король не має спеціальних повноважень - так як ви не можете перевірити мат свого опонента, і ви не можете змусити його перевірити.
Наступні зміни до стандартної гри також застосовуватимуться (вони допомагають спростити гру):
- Експансія буде проігнорована.
- Кастинг неможливий.
- Правило " П'ятдесят рухів" застосовується автоматично (тобто гра закінчується внічию).
- Пішаки зможуть вибрати те, на що вони рекламують.
- Якщо гравцеві потрібно більше 2 секунд для переміщення, він програє гру.
- Повернення недійсного ходу призведе до втрати гри.
- Щоб виграти, опоненти повинні захопити всі ваші шматки .
- Білий починає гру.
- Білий розміщується «внизу» поля (у = 0), чорний - у верхній частині (у = 7).
- Доступ до інших ресурсів, ніж ваш бот (Інтернет, файли, інші боти, ...) заборонено.
Оцінка балів
- Виграш надає вам 3 очки, нічия 1 бал і втрата 0 балів.
- Кожне подання буде грати один проти одного 10 разів (5 разів біліше, 5 - чорне).
Написання вашого бота
Код контролера тут: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Ви можете написати свого бота на Java або Groovy. Щоб написати бота, ви повинні продовжити Player
клас. Клас гравців має один абстрактний метод Move getMove(Board board, Player enemy, Set<Move> validMoves)
.
Ось короткий пробіг корисних методів:
Player
:
List<Piece> getPieces(Board board)
: Поверніть усі свої шматки, які є на дошці.PieceUpgradeType pieceUpgradeType
: Якщо / коли одна з ваших пішаків досягне кінця дошки, вам потрібно буде визначити це до типу твору, до якого ви хочете оновити. У вас є вибірROOK
,KNIGHT
,QUEEN
,BISHOP
, іKING
.
Board
:
Field getFieldAtLoc(Location loc)
: ПовернітьField
місцеположення. ЦеgetAt
метод відповідності, так що якщо ви використовуєте groovy, ви можете писатиboard[loc]
.Field getFieldAtLoc(int x, int y)
: ПовернітьField
місцеположення. ЦеgetAt
метод відповідності, так що якщо ви використовуєте groovy, ви можете писатиboard[x, y]
.Board movePiece(Player player, Move move)
: Зробіть рух на дошці, щоб ви могли бачити, як це буде грати. Він повертає нову дошку.
Якщо ви хочете побачити твори опонентів, просто напишіть enemy.getPieces(board)
. Щоб додати свого бота до лінійки, додайте такий рядок до PlayerFactory
:
put(YourBot.class, { new YourBot() } )
Налагодження бота:
Я включив пару інструментів для налагодження ваших ботів. Щоб побачити вашу гру, яку ви граєте в прямому ефірі, ви можете встановити Game#DEBUG
прапор істинно. Ви отримаєте такий результат:
Game started. Players: [OnePlayBot(WHITE), SacrificeBot(BLACK)]
...
BLACKs turn.
validMoves: [Move(Piece(BLACK, PAWN, Loc(0, 6)), Loc(0, 5)), ...]
board:
RKBQIBKR
PPPPPPPP
--------
--------
--------
p-------
-ppppppp
rkbqibkr
captureless turns: 1
chosen move: Move(Piece(BLACK, PAWN, Loc(7, 6)), Loc(7, 4))
Game over? false
==============================
WHITEs turn.
validMoves: [Move(Piece(WHITE, ROOK, Loc(0, 0)), Loc(0, 1)), ...]
board:
RKBQIBKR
PPPPPPP-
--------
-------P
--------
p-------
-ppppppp
rkbqibkr
...
(Білий верхній регістр, король зображений на i
)
Якщо ваша консоль підтримує utf-8 спеціальних знаків, ви навіть можете показати дошку з шаховими символами, використовуючи Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(краще виглядає з моновіднесеним шрифтом)
Щоб запобігти затопленню небажаного виводу, слід змінити Main#main
функцію на щось подібне:
new Game(new MyBot(), new SacrificeBot()).run()
Покладіть бота зліва, щоб він грав як білий, а праворуч - як чорний.
Побудова контролера:
Контролер написаний groovy, тому у вас повинні бути встановлені java та groovy. Якщо ви не хочете встановлювати groovy, ви можете використовувати файл збірки gradle, що постачається з контролером (це не перевірено). Якщо ви не хочете використовувати groovy або gradle, ви можете скористатись останньою версією випуску ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ). Для цього вам потрібно зробити власний main
метод і додати свого бота вручну до фабрики плеєрів. Приклад:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Зверніть увагу, що ви все ще можете встановити прапорці та налагодження)
Будь-яка помилка знайшла високу оцінку!
Оцінки:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Зверніть увагу, що я завжди готовий мати нові матеріали!