Several small improvements + integrate options + first working draft of Cwda
[vchess.git] / client / src / variants / Fugue.js
index c29324a..2c83fb2 100644 (file)
@@ -122,7 +122,11 @@ export class FugueRules extends ChessRules {
   }
 
   canTake([x1, y1], [x2, y2]) {
-    return !this.isProtected([x2, y2]) && super.canTake([x1, y1], [x2, y2]);
+    return (
+      [V.QUEEN, V.KING].includes(this.getPiece(x1, y1)) &&
+      !this.isProtected([x2, y2]) &&
+      this.getColor(x1, y1) != this.getColor(x2, y2)
+    );
   }
 
   getPotentialMovesFrom([x, y]) {
@@ -143,30 +147,6 @@ export class FugueRules extends ChessRules {
     }
   }
 
-  getSlideNJumpMoves([x, y], steps, oneStep) {
-    const piece = this.getPiece(x, y);
-    let moves = [];
-    outerLoop: for (let step of steps) {
-      let i = x + step[0];
-      let j = y + step[1];
-      while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
-        moves.push(this.getBasicMove([x, y], [i, j]));
-        if (oneStep !== undefined) continue outerLoop;
-        i += step[0];
-        j += step[1];
-      }
-      // Only queen and king can take on occupied square:
-      if (
-        [V.KING, V.QUEEN].includes(piece) &&
-        V.OnBoard(i, j) &&
-        this.canTake([x, y], [i, j])
-      ) {
-        moves.push(this.getBasicMove([x, y], [i, j]));
-      }
-    }
-    return moves;
-  }
-
   // "Cannon/grasshopper pawn"
   getPotentialPawnMoves([x, y]) {
     const c = this.turn;
@@ -228,7 +208,7 @@ export class FugueRules extends ChessRules {
 
   getPotentialKingMoves(sq) {
     const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
-    return this.getSlideNJumpMoves(sq, steps, "oneStep");
+    return this.getSlideNJumpMoves(sq, steps, 1);
   }
 
   // NOTE: not really captures, but let's keep the name
@@ -512,8 +492,8 @@ export class FugueRules extends ChessRules {
     }
   }
 
-  static GenRandInitFen(randomness) {
-    if (randomness == 0) {
+  static GenRandInitFen(options) {
+    if (options.randomness == 0) {
       return (
         "wlqksaui/pppppppp/8/8/8/8/PPPPPPPP/IUASKQLW w 0"
       );
@@ -522,7 +502,7 @@ export class FugueRules extends ChessRules {
     let pieces = { w: new Array(8), b: new Array(8) };
     // Shuffle pieces on first and last rank
     for (let c of ["w", "b"]) {
-      if (c == 'b' && randomness == 1) {
+      if (c == 'b' && options.randomness == 1) {
         pieces['b'] = pieces['w'];
         break;
       }