Monochrome: fixing attempt
[vchess.git] / client / src / variants / Monochrome.js
index 954a050..8c74961 100644 (file)
@@ -47,79 +47,21 @@ export class MonochromeRules extends ChessRules {
     return ((x1 <= 3 && x2 >= 4) || (x1 >= 4 && x2 <= 3));
   }
 
-  // follow steps from x,y until something is met.
-  // if met piece is opponent and same movement (asA): eat it!
-  findCaptures_aux([x, y], asA) {
-    let moves = [];
-    const steps =
-      asA != V.PAWN
-        ? [V.QUEEN, V.KING].includes(asA)
-          ? V.steps[V.ROOK].concat(V.steps[V.BISHOP])
-          : V.steps[asA]
-        : this.turn == "w"
-          ? [
-            [-1, -1],
-            [-1, 1]
-          ]
-          : [
-            [1, -1],
-            [1, 1]
-          ];
-    const oneStep = [V.KNIGHT, V.PAWN, V.KING].includes(asA);
-    outerLoop: for (let loop = 0; loop < steps.length; loop++) {
-      const step = steps[loop];
-      let i = x + step[0];
-      let j = y + step[1];
-      while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
-        if (oneStep) continue outerLoop;
-        i += step[0];
-        j += step[1];
-      }
-      if (
-        V.OnBoard(i, j) &&
-        this.getPiece(i, j) == asA &&
-        this.canTake([i, j], [x, y])
-      ) {
-        // eat!
-        moves.push(this.getBasicMove([x, y], [i, j]));
-      }
-    }
-    return moves;
-  }
-
-  // Find possible captures from a square: look in every direction!
-  findCaptures(sq) {
-    let moves = [];
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.PAWN));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.ROOK));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KNIGHT));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.BISHOP));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.QUEEN));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KING));
-    return moves;
-  }
-
   // Trim all non-capturing moves
   static KeepCaptures(moves) {
     return moves.filter(m => m.vanish.length == 2);
   }
 
-  getPotentialMovesFrom(sq) {
-    const moves = super.getPotentialMovesFrom(sq);
-    const zenCaptures = this.findCaptures(sq);
-    // Remove duplicate captures in a lazy way (TODO: more efficient...)
-    let hashMoves = {};
-    moves.forEach(m => {
-      if (m.vanish.length == 2) {
-        const hash =
-          m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
-        hashMoves[hash] = true;
-      }
-    });
-    return moves.concat(zenCaptures.filter(m => {
-      const hash = m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
-      return !hashMoves[hash];
-    }));
+  getPotentialKnightMoves(sq) {
+    // Knight becomes knightrider:
+    return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT]);
+  }
+
+  getPotentialKingMoves(sq) {
+    // King become queen:
+    return (
+      this.getSlideNJumpMoves(sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]));
+    )
   }
 
   getAllPotentialMoves() {