Add Knightrelay1. Some fixes. Move odd 'isAttackedBy_multiple_colors' to Checkered...
[vchess.git] / client / src / variants / Antiking.js
index 21e37f4..94c8af6 100644 (file)
@@ -68,28 +68,31 @@ export const VariantRules = class AntikingRules extends ChessRules {
     );
   }
 
-  isAttacked(sq, colors) {
+  isAttacked(sq, color) {
     return (
-      super.isAttacked(sq, colors) || this.isAttackedByAntiking(sq, colors)
+      super.isAttacked(sq, color) ||
+      this.isAttackedByAntiking(sq, color)
     );
   }
 
-  isAttackedByKing([x, y], colors) {
-    if (this.getPiece(x, y) == V.ANTIKING) return false; //antiking is not attacked by king
+  isAttackedByKing([x, y], color) {
+    // Antiking is not attacked by king:
+    if (this.getPiece(x, y) == V.ANTIKING) return false;
     return this.isAttackedBySlideNJump(
       [x, y],
-      colors,
+      color,
       V.KING,
       V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
       "oneStep"
     );
   }
 
-  isAttackedByAntiking([x, y], colors) {
-    if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false; //(anti)king is not attacked by antiking
+  isAttackedByAntiking([x, y], color) {
+    // (Anti)King is not attacked by antiking
+    if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false;
     return this.isAttackedBySlideNJump(
       [x, y],
-      colors,
+      color,
       V.ANTIKING,
       V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
       "oneStep"
@@ -99,20 +102,20 @@ export const VariantRules = class AntikingRules extends ChessRules {
   underCheck(color) {
     const oppCol = V.GetOppCol(color);
     let res =
-      this.isAttacked(this.kingPos[color], [oppCol]) ||
-      !this.isAttacked(this.antikingPos[color], [oppCol]);
+      this.isAttacked(this.kingPos[color], oppCol) ||
+      !this.isAttacked(this.antikingPos[color], oppCol);
     return res;
   }
 
   getCheckSquares(color) {
     let res = super.getCheckSquares(color);
-    if (!this.isAttacked(this.antikingPos[color], [V.GetOppCol(color)]))
+    if (!this.isAttacked(this.antikingPos[color], V.GetOppCol(color)))
       res.push(JSON.parse(JSON.stringify(this.antikingPos[color])));
     return res;
   }
 
-  updateVariables(move) {
-    super.updateVariables(move);
+  postPlay(move) {
+    super.postPlay(move);
     const piece = move.vanish[0].p;
     const c = move.vanish[0].c;
     // Update antiking position
@@ -122,8 +125,8 @@ export const VariantRules = class AntikingRules extends ChessRules {
     }
   }
 
-  unupdateVariables(move) {
-    super.unupdateVariables(move);
+  postUndo(move) {
+    super.postUndo(move);
     const c = move.vanish[0].c;
     if (move.vanish[0].p == V.ANTIKING)
       this.antikingPos[c] = [move.start.x, move.start.y];
@@ -136,8 +139,8 @@ export const VariantRules = class AntikingRules extends ChessRules {
     const color = this.turn;
     const oppCol = V.GetOppCol(color);
     if (
-      !this.isAttacked(this.kingPos[color], [oppCol]) &&
-      this.isAttacked(this.antikingPos[color], [oppCol])
+      !this.isAttacked(this.kingPos[color], oppCol) &&
+      this.isAttacked(this.antikingPos[color], oppCol)
     ) {
       return "1/2";
     }
@@ -151,10 +154,21 @@ export const VariantRules = class AntikingRules extends ChessRules {
     );
   }
 
-  static GenRandInitFen() {
+  static GenRandInitFen(randomness) {
+    if (randomness == 0)
+      return "rnbqkbnr/pppppppp/3A4/8/8/3a4/PPPPPPPP/RNBQKBNR w 0 ahah -";
+
     let pieces = { w: new Array(8), b: new Array(8) };
+    let flags = "";
     let antikingPos = { w: -1, b: -1 };
     for (let c of ["w", "b"]) {
+      if (c == 'b' && randomness == 1) {
+        pieces['b'] = pieces['w'];
+        antikingPos['b'] = antikingPos['w'];
+        flags += flags;
+        break;
+      }
+
       let positions = ArrayFun.range(8);
 
       // Get random squares for bishops, but avoid corners; because,
@@ -192,6 +206,7 @@ export const VariantRules = class AntikingRules extends ChessRules {
       pieces[c][bishop2Pos] = "b";
       pieces[c][knight2Pos] = "n";
       pieces[c][rook2Pos] = "r";
+      flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos);
     }
     const ranks23_black =
       "pppppppp/" +
@@ -211,7 +226,11 @@ export const VariantRules = class AntikingRules extends ChessRules {
       ranks23_white +
       "/" +
       pieces["w"].join("").toUpperCase() +
-      " w 0 1111 -"
+      " w 0 " + flags + " -"
     );
   }
+
+  static get SEARCH_DEPTH() {
+    return 2;
+  }
 };