Support capablanca random chess
authorFabian Fichter <ianfab@users.noreply.github.com>
Tue, 14 May 2019 20:55:33 +0000 (22:55 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Wed, 15 May 2019 18:40:07 +0000 (20:40 +0200)
https://en.wikipedia.org/wiki/Capablanca_Random_Chess

Readme.md
src/position.cpp
src/variant.cpp
src/variant.h

index 233c43f..9059065 100644 (file)
--- 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)
index c016f1d..64fd9c6 100644 (file)
@@ -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);
 
index af3f0ba..0f0a0ee 100644 (file)
@@ -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());
index ed3b17c..2527ccb 100644 (file)
@@ -36,6 +36,7 @@ struct Variant {
   int pocketSize = 0;
   Rank maxRank = RANK_8;
   File maxFile = FILE_H;
+  bool chess960 = false;
   std::set<PieceType> 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, ' ');