https://en.wikipedia.org/wiki/Losing_chess
Il s'agit essentiellement d'un tournoi d'échecs , mais pour les antichess;)
Antichess est l'une des nombreuses variantes d'échecs qui ont été inventées. Le but est de perdre toutes vos pièces (cela peut sembler un peu étrange, mais cela s'appelle antichess pour une raison).
Les règles
Les règles de l'antichess sont très similaires aux échecs standard - mais avec quelques différences assez mineures. Le but comme je l'ai mentionné ci-dessus est de perdre toutes vos pièces. Pour y arriver, si votre adversaire a la possibilité de capturer une de vos pièces, c'est le seul mouvement qu'il puisse faire. Si vous lui donnez plusieurs chances en un tour, l'autre joueur peut choisir son tour. Une autre chose qui a changé est que le roi n'a pas de pouvoirs spéciaux - car vous ne pouvez pas mater votre adversaire et vous ne pouvez pas le forcer à échouer.
Les modifications suivantes du jeu standard s'appliqueront également (elles aident à simplifier le jeu):
- En passant sera ignoré.
- Le roque n'est pas possible.
- La règle des cinquante coups s'applique automatiquement (ce qui signifie que le jeu se termine par un match nul).
- Les pions pourront choisir ce qu'ils promeuvent.
- Si un joueur a besoin de plus de 2 secondes pour se déplacer, il perdra la partie.
- Le retour d'un coup invalide entraînera la perte de la partie.
- Pour gagner, vos adversaires doivent capturer toutes vos pièces .
- Les blancs commencent le jeu.
- Le blanc est placé "en bas" du champ (y = 0), le noir est situé en haut (y = 7).
- L'accès à d'autres ressources que votre bot (internet, fichiers, autres bots, ...) est interdit.
Notation
- Gagner vous accorde 3 points, un match nul 1 point et perdre 0 points.
- Chaque soumission sera jouée 10 fois contre l'autre (5 fois blanche, 5 noire).
Écrire votre bot
Le code du contrôleur est ici: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Vous pouvez écrire votre bot en Java ou en Groovy. Pour écrire un bot, vous devez étendre la Player
classe. La classe de joueur a une méthode abstraite Move getMove(Board board, Player enemy, Set<Move> validMoves)
.
Voici un bref aperçu des méthodes utiles:
Player
:
List<Piece> getPieces(Board board)
: Retournez toutes vos pièces qui se trouvent sur le plateau.PieceUpgradeType pieceUpgradeType
: Si / quand l'un de vos pions atteint la fin du plateau, vous devrez le définir en fonction du type de pièce que vous souhaitez mettre à niveau. Vous avez le choix entreROOK
,KNIGHT
,QUEEN
,BISHOP
etKING
.
Board
:
Field getFieldAtLoc(Location loc)
: Retournez leField
à l'emplacement. Cela a unegetAt
méthode de correspondance de sorte que si vous utilisez groovy, vous pouvez écrireboard[loc]
.Field getFieldAtLoc(int x, int y)
: Retournez leField
à l'emplacement. Cela a unegetAt
méthode de correspondance de sorte que si vous utilisez groovy, vous pouvez écrireboard[x, y]
.Board movePiece(Player player, Move move)
: Faites un pas sur le plateau pour voir comment ça se passerait. Il renvoie la nouvelle carte.
Si vous voulez voir les pièces de vos adversaires, écrivez simplement enemy.getPieces(board)
. Pour ajouter votre bot à la programmation, ajoutez la ligne suivante à PlayerFactory
:
put(YourBot.class, { new YourBot() } )
Débogage de votre bot:
J'ai inclus quelques outils pour aider au débogage de vos bots. Pour voir votre match joué en direct, vous pouvez définir le Game#DEBUG
drapeau sur true. Vous obtiendrez une sortie quelque chose comme ceci:
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
...
(Le blanc est en majuscules, le roi est montré avec i
)
Si votre console prend en charge les caractères spéciaux utf-8, vous pouvez même afficher le tableau avec les caractères d'échecs en utilisant Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(il semble mieux avec une police à espacement mono)
Pour éviter un flot de sortie indésirable, vous devez remplacer la Main#main
fonction par quelque chose comme ceci:
new Game(new MyBot(), new SacrificeBot()).run()
Mettez votre bot à gauche pour jouer en blanc, mettez-le à droite pour jouer en noir.
Construire le contrôleur:
Le contrôleur est écrit en groovy, vous devez donc avoir installé java et groovy. Si vous ne voulez pas installer groovy, vous pouvez utiliser le fichier de construction gradle fourni avec le contrôleur (cela n'a pas été testé). Si vous ne voulez pas utiliser groovy ou gradle, vous pouvez utiliser le dernier pot de version ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ). Si vous faites cela, vous devez créer votre propre main
méthode et ajouter votre bot manuellement à l'usine du lecteur. Exemple:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Notez que vous pouvez toujours définir les indicateurs de débogage et tout ça)
Toute recherche de bogue est appréciée!
Scores:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Veuillez noter que je suis toujours prêt à recevoir de nouvelles soumissions!