Several small improvements + integrate options + first working draft of Cwda
[vchess.git] / client / src / variants / Grasshopper.js
index 58b1240..fcc6bb1 100644 (file)
@@ -2,7 +2,20 @@ import { ChessRules } from "@/base_rules";
 import { ArrayFun } from "@/utils/array";
 import { randInt } from "@/utils/alea";
 
-export const VariantRules = class GrasshopperRules extends ChessRules {
+export class GrasshopperRules extends ChessRules {
+
+  static get HasEnpassant() {
+    return false;
+  }
+
+  static get PawnSpecs() {
+    return Object.assign(
+      {},
+      ChessRules.PawnSpecs,
+      { promotions: ChessRules.PawnSpecs.promotions.concat([V.GRASSHOPPER]) }
+    );
+  }
+
   static get GRASSHOPPER() {
     return "g";
   }
@@ -42,14 +55,14 @@ export const VariantRules = class GrasshopperRules extends ChessRules {
     return moves;
   }
 
-  isAttacked(sq, colors) {
+  isAttacked(sq, color) {
     return (
-      super.isAttacked(sq, colors) ||
-      this.isAttackedByGrasshopper(sq, colors)
+      super.isAttacked(sq, color) ||
+      this.isAttackedByGrasshopper(sq, color)
     );
   }
 
-  isAttackedByGrasshopper([x, y], colors) {
+  isAttackedByGrasshopper([x, y], color) {
     // Reversed process: is there an adjacent obstacle,
     // and a grasshopper next in the same line?
     for (const step of V.steps[V.ROOK].concat(V.steps[V.BISHOP])) {
@@ -67,7 +80,7 @@ export const VariantRules = class GrasshopperRules extends ChessRules {
         if (
           V.OnBoard(i, j) &&
           this.getPiece(i, j) == V.GRASSHOPPER &&
-          colors.includes(this.getColor(i, j))
+          this.getColor(i, j) == color
         ) {
           return true;
         }
@@ -84,11 +97,17 @@ export const VariantRules = class GrasshopperRules extends ChessRules {
     );
   }
 
-  static GenRandInitFen() {
-    return ChessRules.GenRandInitFen()
+  static get SEARCH_DEPTH() {
+    return 2;
+  }
+
+  static GenRandInitFen(options) {
+    return ChessRules.GenRandInitFen(options)
+      .slice(0, -2)
       .replace(
         "/pppppppp/8/8/8/8/PPPPPPPP/",
         "/gggggggg/pppppppp/8/8/PPPPPPPP/GGGGGGGG/"
       );
   }
+
 };