X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FZen.js;h=17c922d2a70f4913069baa364972ceb7cfb31e6d;hb=a37076f1ac8f4c19d9b34a60cbe89df86b88fa0b;hp=96dd8f9f72d09f6fc08c74696cbe34be57232e15;hpb=33ee191669b40afbd03d8fbf5406382fa2de1bf9;p=vchess.git diff --git a/public/javascripts/variants/Zen.js b/public/javascripts/variants/Zen.js index 96dd8f9f..17c922d2 100644 --- a/public/javascripts/variants/Zen.js +++ b/public/javascripts/variants/Zen.js @@ -7,8 +7,9 @@ class ZenRules extends ChessRules } // TODO: some duplicated code in 2 next functions - getSlideNJumpMoves(x, y, color, steps, oneStep) + getSlideNJumpMoves([x,y], steps, oneStep) { + const color = this.getColor(x,y); var moves = []; let [sizeX,sizeY] = VariantRules.size; outerLoop: @@ -20,8 +21,8 @@ class ZenRules extends ChessRules while (i>=0 && i=0 && j { - moves.push(this.getBasicMove(x, y, i, j, p)); + moves.push(this.getBasicMove([x,y], [i,j], {c:color,p:p})); }); } else { // All other cases - moves.push(this.getBasicMove(x, y, i, j)); + moves.push(this.getBasicMove([x,y], [i,j])); } } } @@ -80,40 +82,37 @@ class ZenRules extends ChessRules } // Find possible captures from a square: look in every direction! - findCaptures(x, y, color) + findCaptures(sq) { var moves = []; // PAWN - Array.prototype.push.apply(moves, - this.findCaptures_aux(x, y, color, VariantRules.PAWN)); + Array.prototype.push.apply(moves, this.findCaptures_aux(sq, VariantRules.PAWN)); // ROOK - Array.prototype.push.apply(moves, - this.findCaptures_aux(x, y, color, VariantRules.ROOK)); + Array.prototype.push.apply(moves, this.findCaptures_aux(sq, VariantRules.ROOK)); // KNIGHT - Array.prototype.push.apply(moves, - this.findCaptures_aux(x, y, color, VariantRules.KNIGHT)); + Array.prototype.push.apply(moves, this.findCaptures_aux(sq, VariantRules.KNIGHT)); // BISHOP - Array.prototype.push.apply(moves, - this.findCaptures_aux(x, y, color, VariantRules.BISHOP)); + Array.prototype.push.apply(moves, this.findCaptures_aux(sq, VariantRules.BISHOP)); // QUEEN - Array.prototype.push.apply(moves, - this.findCaptures_aux(x, y, color, VariantRules.QUEEN)); + Array.prototype.push.apply(moves, this.findCaptures_aux(sq, VariantRules.QUEEN)); return moves; } - getPotentialPawnMoves(x, y, color) + getPotentialPawnMoves([x,y]) { + const color = this.getColor(x,y); var moves = []; var V = VariantRules; let [sizeX,sizeY] = VariantRules.size; let shift = (color == 'w' ? -1 : 1); let startRank = (color == 'w' ? sizeY-2 : 1); + let firstRank = (color == 'w' ? sizeY-1 : 0); let lastRank = (color == "w" ? 0 : sizeY-1); if (x+shift >= 0 && x+shift < sizeX && x+shift != lastRank) @@ -121,11 +120,11 @@ class ZenRules extends ChessRules // Normal moves if (this.board[x+shift][y] == V.EMPTY) { - moves.push(this.getBasicMove(x, y, x+shift, y)); - if (x==startRank && this.board[x+2*shift][y] == V.EMPTY) + moves.push(this.getBasicMove([x,y], [x+shift,y])); + if ([startRank,firstRank].includes(x) && this.board[x+2*shift][y] == V.EMPTY) { //two squares jump - moves.push(this.getBasicMove(x, y, x+2*shift, y)); + moves.push(this.getBasicMove([x,y], [x+2*shift,y])); } } } @@ -137,62 +136,56 @@ class ZenRules extends ChessRules promotionPieces.forEach(p => { // Normal move if (this.board[x+shift][y] == V.EMPTY) - moves.push(this.getBasicMove(x, y, x+shift, y, p)); + moves.push(this.getBasicMove([x,y], [x+shift,y], {c:color,p:p})); }); } // No en passant here // Add "zen" captures - Array.prototype.push.apply(moves, this.findCaptures(x, y, color)); + Array.prototype.push.apply(moves, this.findCaptures([x,y])); return moves; } - getPotentialRookMoves(x, y, color) + getPotentialRookMoves(sq) { - let noCaptures = this.getSlideNJumpMoves( - x, y, color, VariantRules.steps[VariantRules.ROOK]); - let captures = this.findCaptures(x, y, color); + let noCaptures = this.getSlideNJumpMoves(sq, VariantRules.steps[VariantRules.ROOK]); + let captures = this.findCaptures(sq); return noCaptures.concat(captures); } - getPotentialKnightMoves(x, y, color) + getPotentialKnightMoves(sq) { - let noCaptures = this.getSlideNJumpMoves( - x, y, color, VariantRules.steps[VariantRules.KNIGHT], "oneStep"); - let captures = this.findCaptures(x, y, color); + let noCaptures = this.getSlideNJumpMoves(sq, + VariantRules.steps[VariantRules.KNIGHT], "oneStep"); + let captures = this.findCaptures(sq); return noCaptures.concat(captures); } - getPotentialBishopMoves(x, y, color) + getPotentialBishopMoves(sq) { - let noCaptures = this.getSlideNJumpMoves( - x, y, color, VariantRules.steps[VariantRules.BISHOP]); - let captures = this.findCaptures(x, y, color); + let noCaptures = this.getSlideNJumpMoves(sq, VariantRules.steps[VariantRules.BISHOP]); + let captures = this.findCaptures(sq); return noCaptures.concat(captures); } - getPotentialQueenMoves(x, y, color) + getPotentialQueenMoves(sq) { - let noCaptures = this.getSlideNJumpMoves( - x, y, color, VariantRules.steps[VariantRules.QUEEN]); - let captures = this.findCaptures(x, y, color); + const V = VariantRules; + let noCaptures = this.getSlideNJumpMoves(sq, V.steps[V.ROOK.concat(V.steps[V.BISHOP])]); + let captures = this.findCaptures(sq); return noCaptures.concat(captures); } - getPotentialKingMoves(x, y, c) + getPotentialKingMoves(sq) { + const V = VariantRules; // Initialize with normal moves - let noCaptures = this.getSlideNJumpMoves( - x, y, c, VariantRules.steps[VariantRules.QUEEN], "oneStep"); - let captures = this.findCaptures(x, y, c); - - let moves = noCaptures - .concat(captures) - .concat(this.getCastleMoves(x, y, c)); - - return moves; + let noCaptures = this.getSlideNJumpMoves(sq, + V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep"); + let captures = this.findCaptures(sq); + return noCaptures.concat(captures).concat(this.getCastleMoves(sq)); } getNotation(move)