From 7de79e36040a0c31c793db8af075d06b51ce9ea0 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Tue, 14 May 2019 22:55:33 +0200 Subject: [PATCH] Support capablanca random chess https://en.wikipedia.org/wiki/Capablanca_Random_Chess --- Readme.md | 2 +- src/position.cpp | 2 +- src/variant.cpp | 6 ++++++ src/variant.h | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 233c43f..9059065 100644 --- a/Readme.md +++ b/Readme.md @@ -15,7 +15,7 @@ Besides chess, the currently supported games are: - [Shogi](https://en.wikipedia.org/wiki/Shogi) **Chess variants** -- [Capablanca](https://en.wikipedia.org/wiki/Capablanca_Chess), [Janus](https://en.wikipedia.org/wiki/Janus_Chess), [Modern](https://en.wikipedia.org/wiki/Modern_Chess_(chess_variant)), [Chancellor](https://en.wikipedia.org/wiki/Chancellor_Chess), [Embassy](https://en.wikipedia.org/wiki/Embassy_Chess) +- [Capablanca](https://en.wikipedia.org/wiki/Capablanca_Chess), [Janus](https://en.wikipedia.org/wiki/Janus_Chess), [Modern](https://en.wikipedia.org/wiki/Modern_Chess_(chess_variant)), [Chancellor](https://en.wikipedia.org/wiki/Chancellor_Chess), [Embassy](https://en.wikipedia.org/wiki/Embassy_Chess), [Capablanca random chess](https://en.wikipedia.org/wiki/Capablanca_Random_Chess) - [Chess960](https://en.wikipedia.org/wiki/Chess960), [Placement/Pre-Chess](https://www.chessvariants.com/link/placement-chess) - [Crazyhouse](https://en.wikipedia.org/wiki/Crazyhouse), [Loop](https://en.wikipedia.org/wiki/Crazyhouse#Variations), [Chessgi](https://en.wikipedia.org/wiki/Crazyhouse#Variations), [Pocket Knight](http://www.chessvariants.com/other.dir/pocket.html) - [Amazon](https://en.wikipedia.org/wiki/Amazon_(chess)), [Chigorin](https://en.wikipedia.org/wiki/Chigorin_Chess), [Almost chess](https://en.wikipedia.org/wiki/Almost_Chess), [Hoppel-Poppel](http://www.chessvariants.com/diffmove.dir/hoppel-poppel.html) diff --git a/src/position.cpp b/src/position.cpp index c016f1d..64fd9c6 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -433,7 +433,7 @@ Position& Position::set(const Variant* v, const string& fenStr, bool isChess960, st->rule50 = 0; } - chess960 = isChess960; + chess960 = isChess960 || v->chess960; thisThread = th; set_state(st); diff --git a/src/variant.cpp b/src/variant.cpp index af3f0ba..0f0a0ee 100644 --- a/src/variant.cpp +++ b/src/variant.cpp @@ -500,6 +500,11 @@ VariantMap variants; // Global object v->promotionPieceTypes = {ARCHBISHOP, CHANCELLOR, QUEEN, ROOK, BISHOP, KNIGHT}; return v; } + Variant* caparandom_variant() { + Variant* v = capablanca_variant(); + v->chess960 = true; + return v; + } Variant* janus_variant() { Variant* v = fairy_variant_base(); v->maxRank = RANK_8; @@ -635,6 +640,7 @@ void VariantMap::init() { #ifdef LARGEBOARDS add("shogi", shogi_variant()); add("capablanca", capablanca_variant()); + add("caparandom", caparandom_variant()); add("janus", janus_variant()); add("modern", modern_variant()); add("chancellor", chancellor_variant()); diff --git a/src/variant.h b/src/variant.h index ed3b17c..2527ccb 100644 --- a/src/variant.h +++ b/src/variant.h @@ -36,6 +36,7 @@ struct Variant { int pocketSize = 0; Rank maxRank = RANK_8; File maxFile = FILE_H; + bool chess960 = false; std::set pieceTypes = { PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING }; std::string pieceToChar = " PNBRQ" + std::string(KING - QUEEN - 1, ' ') + "K" + std::string(PIECE_TYPE_NB - KING - 1, ' ') + " pnbrq" + std::string(KING - QUEEN - 1, ' ') + "k" + std::string(PIECE_TYPE_NB - KING - 1, ' '); -- 1.7.0.4