X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FBerolina.js;h=9b071d34c6bf5f97ce0e64d53f427b2f0e1acbe3;hb=c350b3e525b72509a4b717a513ccaa596f1fc515;hp=e5a222bb8de5a84a26b898909dc45238cd014602;hpb=2c5d7b20742b802d9c47916915c1114bcfc9a9c3;p=vchess.git diff --git a/client/src/variants/Berolina.js b/client/src/variants/Berolina.js index e5a222bb..9b071d34 100644 --- a/client/src/variants/Berolina.js +++ b/client/src/variants/Berolina.js @@ -1,6 +1,11 @@ import { ChessRules } from "@/base_rules"; export class BerolinaRules extends ChessRules { + + getPpath(b) { + return (b[1] == 'p' ? "Berolina/" : "") + b; + } + // En-passant after 2-sq jump getEpSquare(moveOrSquare) { if (!moveOrSquare) return undefined; @@ -53,6 +58,26 @@ export class BerolinaRules extends ChessRules { ); } + getEnpassantCaptures([x, y], shift) { + const Lep = this.epSquares.length; + const epSquare = this.epSquares[Lep - 1]; //always at least one element + if ( + !!epSquare && + epSquare[0].x == x + shift && + epSquare[0].y == y + ) { + let enpassantMove = this.getBasicMove([x, y], [x + shift, y]); + enpassantMove.vanish.push({ + x: x, + y: epSquare[1], + p: "p", + c: this.getColor(x, epSquare[1]) + }); + return [enpassantMove]; + } + return []; + } + // Special pawns movements getPotentialPawnMoves([x, y]) { const color = this.turn; @@ -96,31 +121,21 @@ export class BerolinaRules extends ChessRules { this.board[x + shiftX][y] != V.EMPTY && this.canTake([x, y], [x + shiftX, y]) ) { - for (let piece of finalPieces) + for (let piece of finalPieces) { moves.push( this.getBasicMove([x, y], [x + shiftX, y], { c: color, p: piece }) ); + } } // Next condition so that other variants could inherit from this class - if (V.PawnSpecs.enPassant) { - // En passant - const Lep = this.epSquares.length; - const epSquare = this.epSquares[Lep - 1]; //always at least one element - if ( - !!epSquare && - epSquare[0].x == x + shiftX && - epSquare[0].y == y - ) { - let enpassantMove = this.getBasicMove([x, y], [x + shiftX, y]); - enpassantMove.vanish.push({ - x: x, - y: epSquare[1], - p: "p", - c: this.getColor(x, epSquare[1]) - }); - moves.push(enpassantMove); - } + if (V.HasEnpassant) { + // NOTE: backward en-passant captures are not considered + // because no rules define them (for now). + Array.prototype.push.apply( + moves, + this.getEnpassantCaptures([x, y], shiftX) + ); } return moves; @@ -128,15 +143,11 @@ export class BerolinaRules extends ChessRules { isAttackedByPawn([x, y], color) { let pawnShift = (color == "w" ? 1 : -1); - if (x + pawnShift >= 0 && x + pawnShift < V.size.x) { - if ( - this.getPiece(x + pawnShift, y) == V.PAWN && - this.getColor(x + pawnShift, y) == color - ) { - return true; - } - } - return false; + return ( + x + pawnShift >= 0 && x + pawnShift < V.size.x && + this.getPiece(x + pawnShift, y) == V.PAWN && + this.getColor(x + pawnShift, y) == color + ); } static get SEARCH_DEPTH() { @@ -150,7 +161,7 @@ export class BerolinaRules extends ChessRules { const finalSquare = V.CoordsToSquare(move.end); let notation = ""; if (move.vanish.length == 2) - //capture + // Capture notation = "Px" + finalSquare; else { // No capture: indicate the initial square for potential ambiguity @@ -164,4 +175,5 @@ export class BerolinaRules extends ChessRules { } return super.getNotation(move); //all other pieces are orthodox } + };