- // 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;
- }
-