X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FKnightmate.js;h=593fcc097a4147fa59cfcb34cd6d6a1becc57df7;hb=c3ff3a0c807d97c0311a06491318fe02440266db;hp=c0e84c63caf62cd14d472db6b159428080b45cd7;hpb=a97bdbda4ecf83645d409b717e36828784d1450d;p=vchess.git diff --git a/client/src/variants/Knightmate.js b/client/src/variants/Knightmate.js index c0e84c63..593fcc09 100644 --- a/client/src/variants/Knightmate.js +++ b/client/src/variants/Knightmate.js @@ -2,7 +2,7 @@ import { ChessRules } from "@/base_rules"; import { ArrayFun } from "@/utils/array"; import { randInt } from "@/utils/alea"; -export const VariantRules = class KnightmateRules extends ChessRules { +export class KnightmateRules extends ChessRules { static get COMMONER() { return "c"; } @@ -15,56 +15,9 @@ export const VariantRules = class KnightmateRules extends ChessRules { return ([V.KING, V.COMMONER].includes(b[1]) ? "Knightmate/" : "") + b; } - static GenRandInitFen() { - let pieces = { w: new Array(8), b: new Array(8) }; - // Shuffle pieces on first and last rank - for (let c of ["w", "b"]) { - let positions = ArrayFun.range(8); - - // Get random squares for bishops - let randIndex = 2 * randInt(4); - const bishop1Pos = positions[randIndex]; - let randIndex_tmp = 2 * randInt(4) + 1; - const bishop2Pos = positions[randIndex_tmp]; - positions.splice(Math.max(randIndex, randIndex_tmp), 1); - positions.splice(Math.min(randIndex, randIndex_tmp), 1); - - // Get random squares for commoners - randIndex = randInt(6); - const commoner1Pos = positions[randIndex]; - positions.splice(randIndex, 1); - randIndex = randInt(5); - const commoner2Pos = positions[randIndex]; - positions.splice(randIndex, 1); - - // Get random square for queen - randIndex = randInt(4); - const queenPos = positions[randIndex]; - positions.splice(randIndex, 1); - - // Rooks and king positions are now fixed, - // because of the ordering rook-king-rook - const rook1Pos = positions[0]; - const kingPos = positions[1]; - const rook2Pos = positions[2]; - - // Finally put the shuffled pieces in the board array - pieces[c][rook1Pos] = "r"; - pieces[c][commoner1Pos] = "c"; - pieces[c][bishop1Pos] = "b"; - pieces[c][queenPos] = "q"; - pieces[c][kingPos] = "k"; - pieces[c][bishop2Pos] = "b"; - pieces[c][commoner2Pos] = "c"; - pieces[c][rook2Pos] = "r"; - } - // Add turn + flags + enpassant - return ( - pieces["b"].join("") + - "/pppppppp/8/8/8/8/PPPPPPPP/" + - pieces["w"].join("").toUpperCase() + - " w 0 1111 -" - ); + static GenRandInitFen(randomness) { + return ChessRules.GenRandInitFen(randomness) + .replace(/n/g, 'c').replace(/N/g, 'C'); } getPotentialMovesFrom([x, y]) { @@ -88,31 +41,31 @@ export const VariantRules = class KnightmateRules extends ChessRules { return super.getPotentialKnightMoves(sq).concat(super.getCastleMoves(sq)); } - isAttacked(sq, colors) { + isAttacked(sq, color) { return ( - this.isAttackedByCommoner(sq, colors) || - this.isAttackedByPawn(sq, colors) || - this.isAttackedByRook(sq, colors) || - this.isAttackedByBishop(sq, colors) || - this.isAttackedByQueen(sq, colors) || - this.isAttackedByKing(sq, colors) + this.isAttackedByCommoner(sq, color) || + this.isAttackedByPawn(sq, color) || + this.isAttackedByRook(sq, color) || + this.isAttackedByBishop(sq, color) || + this.isAttackedByQueen(sq, color) || + this.isAttackedByKing(sq, color) ); } - isAttackedByKing(sq, colors) { + isAttackedByKing(sq, color) { return this.isAttackedBySlideNJump( sq, - colors, + color, V.KING, V.steps[V.KNIGHT], "oneStep" ); } - isAttackedByCommoner(sq, colors) { + isAttackedByCommoner(sq, color) { return this.isAttackedBySlideNJump( sq, - colors, + color, V.COMMONER, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep"