https://en.wikipedia.org/wiki/Losing_chess
To w zasadzie Turniej Szachowy , ale dla szachów;)
Antichess to jeden z wielu wymyślonych wariantów szachowych . Celem jest utrata wszystkich elementów (może się to wydawać trochę dziwne, ale z jakiegoś powodu nazywa się to szachami).
Zasady
Zasady gry w szachy są bardzo podobne do standardowych szachów, ale z kilkoma dość niewielkimi różnicami. Celem, jak wspomniałem powyżej, jest utrata wszystkich twoich pionków. Aby tak się stało, jeśli twój przeciwnik ma możliwość złapania jednego z twoich pionków, jest to jedyny ruch, jaki może wykonać. Jeśli dasz mu wiele szans w jednej turze, drugi gracz może wybrać swoją turę. Inną rzeczą, która się zmienia, jest to, że król nie ma specjalnych mocy - ponieważ nie możesz matować przeciwnika i nie możesz zmusić go do kontroli.
Obowiązują również następujące zmiany w standardowej grze (pomagają uprościć grę):
- En passant zostanie zignorowany.
- Castling nie jest możliwy.
- Reguła Pięćdziesiąt ruch zastosowanie automatycznie (czyli gra kończy się remisem).
- Pionki będą mogły wybrać, co promują.
- Jeśli gracz potrzebuje więcej niż 2 sekund, aby się poruszyć, przegrywa grę.
- Zwrócenie nieprawidłowego ruchu spowoduje przegraną.
- Aby wygrać, twoi przeciwnicy muszą zdobyć wszystkie twoje pionki .
- Biały rozpoczyna grę.
- Biały jest umieszczony „na dole” pola (y = 0), czarny znajduje się u góry (y = 7).
- Dostęp do innych zasobów niż twój bot (internet, pliki, inne boty, ...) jest zabroniony.
Punktacja
- Wygrana daje 3 punkty, remis 1 punkt i utratę 0 punktów.
- Każde zgłoszenie będzie rozgrywane przeciwko sobie 10 razy (5 razy w kolorze białym, 5 w kolorze czarnym).
Pisanie bota
Kod kontrolera znajduje się tutaj: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Możesz napisać swojego bota w Javie lub Groovy. Aby napisać bota, musisz rozszerzyć Playerklasę. Klasa gracza ma jedną abstrakcyjną metodę Move getMove(Board board, Player enemy, Set<Move> validMoves).
Oto krótki przegląd przydatnych metod:
Player:
List<Piece> getPieces(Board board): Zwróć wszystkie swoje pionki na planszy.PieceUpgradeType pieceUpgradeType: Jeśli / kiedy jeden z twoich pionów dojdzie do końca planszy, musisz zdefiniować to do rodzaju elementu, który chcesz ulepszyć. Masz wybórROOK,KNIGHT,QUEEN,BISHOP, iKING.
Board:
Field getFieldAtLoc(Location loc): ZwróćFieldw miejscu. Ma pasującągetAtmetodę, więc jeśli używasz groovy, możesz pisaćboard[loc].Field getFieldAtLoc(int x, int y): ZwróćFieldw miejscu. Ma pasującągetAtmetodę, więc jeśli używasz groovy, możesz pisaćboard[x, y].Board movePiece(Player player, Move move): Wykonaj ruch na planszy, aby zobaczyć, jak to się potoczy. Zwraca nową tablicę.
Jeśli chcesz zobaczyć elementy przeciwników, po prostu napisz enemy.getPieces(board). Aby dodać bota do składu, dodaj następujący wiersz do PlayerFactory:
put(YourBot.class, { new YourBot() } )
Debugowanie bota:
Dołączyłem kilka narzędzi ułatwiających debugowanie twoich botów. Aby zobaczyć, jak gra jest rozgrywana na żywo, możesz ustawić Game#DEBUGflagę na true. Otrzymasz wynik podobny do tego:
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
...
(Białe to wielkie litery, król jest pokazany z i)
Jeśli twoja konsola obsługuje znaki specjalne utf-8, możesz nawet pokazać tablicę z znakami szachowymi, używając Board#USE_UTF8_TO_STRING:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(wygląda lepiej z czcionką mono-odstępową)
Aby zapobiec zalewowi niechcianych wyników, powinieneś zmienić Main#mainfunkcję na coś takiego:
new Game(new MyBot(), new SacrificeBot()).run()
Umieść swojego bota po lewej stronie, aby grać jako biały, a po prawej stronie, aby grać jako czarny.
Budowanie kontrolera:
Kontroler jest napisany groovy, więc musisz mieć zainstalowaną Javę i groovy. Jeśli nie chcesz instalować groovy, możesz użyć pliku kompilacji stopni dołączonego do kontrolera (nie zostało to przetestowane). Jeśli nie chcesz używać groovy ani gradle, możesz użyć najnowszej wersji jar ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ). Jeśli to zrobisz, musisz stworzyć własną mainmetodę i ręcznie dodać bota do fabryki odtwarzacza. Przykład:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Pamiętaj, że nadal możesz ustawić flagi debugowania i takie tam)
Wszelkie wykrywanie błędów jest mile widziane!
Wyniki:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Pamiętaj, że zawsze jestem gotowy na nowe zgłoszenia!