X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FBerolina.js;h=0765d4b9ecd670bf25fbc78e42762a0e8f85a2af;hb=7e8a7ea1cb66adb4a987badfb0a3c2f99a21bd0a;hp=4cdbb88b97bcc1e8f21e69a00da95ab45caaad98;hpb=8d1fcc37a933554e13bc996b5611f8307a4701e8;p=vchess.git diff --git a/client/src/variants/Berolina.js b/client/src/variants/Berolina.js index 4cdbb88b..0765d4b9 100644 --- a/client/src/variants/Berolina.js +++ b/client/src/variants/Berolina.js @@ -1,6 +1,7 @@ import { ChessRules } from "@/base_rules"; -export const VariantRules = class BerolinaRules extends ChessRules { +export class BerolinaRules extends ChessRules { + // En-passant after 2-sq jump getEpSquare(moveOrSquare) { if (!moveOrSquare) return undefined; @@ -62,7 +63,9 @@ export const VariantRules = class BerolinaRules extends ChessRules { const startRank = color == "w" ? sizeX - 2 : 1; const lastRank = color == "w" ? 0 : sizeX - 1; const finalPieces = - x + shiftX == lastRank ? [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN] : [V.PAWN]; + x + shiftX == lastRank + ? [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN] + : [V.PAWN]; // One square diagonally for (let shiftY of [-1, 1]) { @@ -76,6 +79,7 @@ export const VariantRules = class BerolinaRules extends ChessRules { ); } if ( + V.PawnSpecs.twoSquares && x == startRank && y + 2 * shiftY >= 0 && y + 2 * shiftY < sizeY && @@ -93,46 +97,48 @@ export const VariantRules = 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 }) ); + } } - // 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); + // 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); + } } return moves; } - isAttackedByPawn([x, y], colors) { - for (let c of colors) { - let pawnShift = c == "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) == c - ) { - return true; - } - } - } - return false; + isAttackedByPawn([x, y], color) { + let pawnShift = (color == "w" ? 1 : -1); + 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() { + return 2; } getNotation(move) { @@ -142,7 +148,7 @@ export const VariantRules = 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 @@ -150,10 +156,11 @@ export const VariantRules = class BerolinaRules extends ChessRules { notation = startSquare + finalSquare; } if (move.appear[0].p != V.PAWN) - //promotion + // Promotion notation += "=" + move.appear[0].p.toUpperCase(); return notation; } return super.getNotation(move); //all other pieces are orthodox } + };