X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FCircular.js;h=61997f298eae3457a2d90eddcce96e31e90d63ae;hb=c583ef1c1dfd19aee88b22c2175202fbdf4dc1c0;hp=9ec597bda7f3d4561e104f11b48769c2d70a34dd;hpb=0ba6420d3515e278b34c29e5afa1e58f6e08e9eb;p=vchess.git diff --git a/client/src/variants/Circular.js b/client/src/variants/Circular.js index 9ec597bd..61997f29 100644 --- a/client/src/variants/Circular.js +++ b/client/src/variants/Circular.js @@ -3,6 +3,10 @@ import { ArrayFun } from "@/utils/array"; import { randInt, shuffle } from "@/utils/alea"; export const VariantRules = class CircularRules extends ChessRules { + static get HasCastle() { + return false; + } + static get HasEnpassant() { return false; } @@ -30,10 +34,18 @@ export const VariantRules = class CircularRules extends ChessRules { this.pawnFlags = flags; } - static GenRandInitFen() { + static GenRandInitFen(randomness) { + if (randomness == 0) + return "8/8/pppppppp/rnbqkbnr/8/8/PPPPPPPP/RNBQKBNR w 0 1111111111111111"; + let pieces = { w: new Array(8), b: new Array(8) }; // Shuffle pieces on first and fifth rank for (let c of ["w", "b"]) { + if (c == 'b' && randomness == 1) { + pieces['b'] = pieces['w']; + break; + } + let positions = ArrayFun.range(8); // Get random squares for bishops @@ -146,19 +158,10 @@ export const VariantRules = class CircularRules extends ChessRules { return moves; } - getPotentialKingMoves(sq) { - return this.getSlideNJumpMoves( - sq, - V.steps[V.ROOK].concat(V.steps[V.BISHOP]), - "oneStep" - ); - } - filterValid(moves) { const filteredMoves = super.filterValid(moves); // If at least one full move made, everything is allowed: - if (this.movesCount >= 2) - return filteredMoves; + if (this.movesCount >= 2) return filteredMoves; // Else, forbid check: const oppCol = V.GetOppCol(this.turn); return filteredMoves.filter(m => { @@ -169,25 +172,23 @@ export const VariantRules = class CircularRules extends ChessRules { }); } - isAttackedByPawn([x, y], colors) { - const pawnShift = 1; - const attackerRow = V.ComputeX(x + pawnShift); - for (let c of colors) { - for (let i of [-1, 1]) { - if ( - y + i >= 0 && - y + i < V.size.y && - this.getPiece(attackerRow, y + i) == V.PAWN && - this.getColor(attackerRow, y + i) == c - ) { - return true; - } + isAttackedByPawn([x, y], color) { + // pawn shift is always 1 (all pawns go the same way) + const attackerRow = V.ComputeX(x + 1); + for (let i of [-1, 1]) { + if ( + y + i >= 0 && + y + i < V.size.y && + this.getPiece(attackerRow, y + i) == V.PAWN && + this.getColor(attackerRow, y + i) == color + ) { + return true; } } return false; } - isAttackedBySlideNJump([x, y], colors, piece, steps, oneStep) { + isAttackedBySlideNJump([x, y], color, piece, steps, oneStep) { for (let step of steps) { let rx = V.ComputeX(x + step[0]), ry = y + step[1]; @@ -197,8 +198,8 @@ export const VariantRules = class CircularRules extends ChessRules { } if ( V.OnBoard(rx, ry) && - this.getPiece(rx, ry) === piece && - colors.includes(this.getColor(rx, ry)) + this.getPiece(rx, ry) == piece && + this.getColor(rx, ry) == color ) { return true; } @@ -215,15 +216,11 @@ export const VariantRules = class CircularRules extends ChessRules { return flags; } - updateVariables(move) { + postPlay(move) { + super.postPlay(move); const c = move.vanish[0].c; - const secondRank = {"w":6, "b":2}; - // Update king position + flags - if (move.vanish[0].p == V.KING && move.appear.length > 0) { - this.kingPos[c][0] = move.appear[0].x; - this.kingPos[c][1] = move.appear[0].y; - } - else if (move.vanish[0].p == V.PAWN && secondRank[c] == move.start.x) + const secondRank = { "w": 6, "b": 2 }; + if (move.vanish[0].p == V.PAWN && secondRank[c] == move.start.x) // This move turns off a 2-squares pawn flag this.pawnFlags[c][move.start.y] = false; } @@ -238,4 +235,8 @@ export const VariantRules = class CircularRules extends ChessRules { k: 1000 }; } + + static get SEARCH_DEPTH() { + return 2; + } };