X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FGrasshopper.js;h=82caa9f43819702d533d9e47606f6c9ec9929eab;hb=3a2a7b5fd3c6bfd0752838094c27e1fb6172d109;hp=58b1240679720a64edd26cc708d74ef01930c9eb;hpb=1eb6c9dd80ece517091d1763ea2e253315a006c8;p=vchess.git diff --git a/client/src/variants/Grasshopper.js b/client/src/variants/Grasshopper.js index 58b12406..82caa9f4 100644 --- a/client/src/variants/Grasshopper.js +++ b/client/src/variants/Grasshopper.js @@ -3,6 +3,10 @@ import { ArrayFun } from "@/utils/array"; import { randInt } from "@/utils/alea"; export const VariantRules = class GrasshopperRules extends ChessRules { + static get HasEnpassant() { + return false; + } + static get GRASSHOPPER() { return "g"; } @@ -24,6 +28,51 @@ export const VariantRules = class GrasshopperRules extends ChessRules { } } + getPotentialPawnMoves([x, y]) { + const color = this.turn; + let moves = []; + const [sizeX, sizeY] = [V.size.x, V.size.y]; + const shiftX = color == "w" ? -1 : 1; + const lastRank = color == "w" ? 0 : sizeX - 1; + + const finalPieces = + x + shiftX == lastRank + ? [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN, V.GRASSHOPPER] + : [V.PAWN]; + if (this.board[x + shiftX][y] == V.EMPTY) { + // One square forward + for (let piece of finalPieces) { + moves.push( + this.getBasicMove([x, y], [x + shiftX, y], { + c: color, + p: piece + }) + ); + } + // No 2-squares jump + } + // Captures + for (let shiftY of [-1, 1]) { + if ( + y + shiftY >= 0 && + y + shiftY < sizeY && + this.board[x + shiftX][y + shiftY] != V.EMPTY && + this.canTake([x, y], [x + shiftX, y + shiftY]) + ) { + for (let piece of finalPieces) { + moves.push( + this.getBasicMove([x, y], [x + shiftX, y + shiftY], { + c: color, + p: piece + }) + ); + } + } + } + + return moves; + } + getPotentialGrasshopperMoves([x, y]) { let moves = []; // Look in every direction until an obstacle (to jump) is met @@ -84,8 +133,13 @@ export const VariantRules = class GrasshopperRules extends ChessRules { ); } - static GenRandInitFen() { - return ChessRules.GenRandInitFen() + static get SEARCH_DEPTH() { + return 2; + } + + static GenRandInitFen(randomness) { + return ChessRules.GenRandInitFen(randomness) + .slice(0, -2) .replace( "/pppppppp/8/8/8/8/PPPPPPPP/", "/gggggggg/pppppppp/8/8/PPPPPPPP/GGGGGGGG/"