X-Git-Url: https://git.auder.net/img/rock_paper_scissors_lizard_spock.gif?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FBerolina.js;h=ae1509575faf50d429a6ce50b6bb5fdd640c7a85;hb=68e19a449db7a12e0a168e99cd750d985c983ba1;hp=03b1b3b275a934a39e4b2e1476ea493e12dc9637;hpb=6808d7a16ec1e761c6a2dffec2281c96953e4d89;p=vchess.git diff --git a/client/src/variants/Berolina.js b/client/src/variants/Berolina.js index 03b1b3b2..ae150957 100644 --- a/client/src/variants/Berolina.js +++ b/client/src/variants/Berolina.js @@ -23,12 +23,36 @@ export const VariantRules = class BerolinaRules extends ChessRules { x: (ex + sx) / 2, y: (move.end.y + sy) / 2 }, + // The arrival column must be remembered, because + // potentially two pawns could be candidates to be captured: + // one on our left, and one on our right. move.end.y ]; } return undefined; //default } + static IsGoodEnpassant(enpassant) { + if (enpassant != "-") { + const epParts = enpassant.split(","); + const epSq = V.SquareToCoords(epParts[0]); + if (isNaN(epSq.x) || isNaN(epSq.y) || !V.OnBoard(epSq)) return false; + const arrCol = V.ColumnToCoord(epParts[1]); + if (isNaN(arrCol) || arrCol < 0 || arrCol >= V.size.y) return false; + } + return true; + } + + getEnpassantFen() { + const L = this.epSquares.length; + if (!this.epSquares[L - 1]) return "-"; //no en-passant + return ( + V.CoordsToSquare(this.epSquares[L - 1][0]) + + "," + + V.CoordToColumn(this.epSquares[L - 1][1]) + ); + } + // Special pawns movements getPotentialPawnMoves([x, y]) { const color = this.turn; @@ -81,8 +105,7 @@ export const VariantRules = class BerolinaRules extends ChessRules { if ( !!epSquare && epSquare[0].x == x + shiftX && - epSquare[0].y == y && - Math.abs(epSquare[1] - y) == 1 + epSquare[0].y == y ) { let enpassantMove = this.getBasicMove([x, y], [x + shiftX, y]); enpassantMove.vanish.push({ @@ -97,16 +120,14 @@ export const VariantRules = class BerolinaRules extends ChessRules { 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; - } + 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;