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() {