X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FMonochrome.js;h=8c74961bccff03af41f391dcc18455fb6c8175b5;hp=954a050f34f9e82cb34394478bc91b4b2d5d237e;hb=f9ecc49933b5f541724b73856ba816722ea26c34;hpb=4a82dadb64b0a63b909e50cfeb5283609cbaa466 diff --git a/client/src/variants/Monochrome.js b/client/src/variants/Monochrome.js index 954a050f..8c74961b 100644 --- a/client/src/variants/Monochrome.js +++ b/client/src/variants/Monochrome.js @@ -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() {