X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FCheckered.js;fp=client%2Fsrc%2Fvariants%2FCheckered1.js;h=5036a82dbb73bc689018cae03178883b27af8a33;hp=2451f9b50c5e7bed349c43ea8361c545ea5f72a1;hb=eb2d61de8d569470fa329a484efe9bab420b2b82;hpb=d807470f965d4d60a7fe6e1320ac7dfd3f0ea03f diff --git a/client/src/variants/Checkered1.js b/client/src/variants/Checkered.js similarity index 95% rename from client/src/variants/Checkered1.js rename to client/src/variants/Checkered.js index 2451f9b5..5036a82d 100644 --- a/client/src/variants/Checkered1.js +++ b/client/src/variants/Checkered.js @@ -1,6 +1,6 @@ import { ChessRules, Move, PiPo } from "@/base_rules"; -export class Checkered1Rules extends ChessRules { +export class CheckeredRules extends ChessRules { static board2fen(b) { const checkered_codes = { @@ -41,6 +41,26 @@ export class Checkered1Rules extends ChessRules { return (b[0] == "c" ? "Checkered/" : "") + b; } + static get Options() { + return Object.assign( + {}, + ChessRules.Options, + { + check: [ + { + label: "With switch", + defaut: true, + variable: "switch" + } + ] + } + ); + } + + static AbbreviateOptions(opts) { + return (!opts["switch"] ? "NS" : ""); + } + setOtherVariables(fen) { super.setOtherVariables(fen); // Local stack of non-capturing checkered moves: @@ -56,6 +76,7 @@ export class Checkered1Rules extends ChessRules { // Stage 1: as Checkered2. Stage 2: checkered pieces are autonomous const stageInfo = V.ParseFen(fen).stage; this.stage = parseInt(stageInfo[0], 10); + this.canSwitch = (this.stage == 1 && stageInfo[1] != '-'); this.sideCheckered = (this.stage == 2 ? stageInfo[1] : undefined); } @@ -65,7 +86,7 @@ export class Checkered1Rules extends ChessRules { if (fenParts.length != 7) return false; if (fenParts[5] != "-" && !fenParts[5].match(/^([a-h][1-8]){2}$/)) return false; - if (!fenParts[6].match(/^[12][wb]?$/)) return false; + if (!fenParts[6].match(/^[12][wb-]?$/)) return false; return true; } @@ -143,7 +164,7 @@ export class Checkered1Rules extends ChessRules { if (this.getPiece(x, y) == V.KING) { // If at least one checkered piece, allow switching: if ( - !noswitch && + this.canSwitch && !noswitch && this.board.some(b => b.some(cell => cell[0] == 'c')) ) { const oppCol = V.GetOppCol(color); @@ -592,10 +613,13 @@ export class Checkered1Rules extends ChessRules { return evaluation; } - static GenRandInitFen(randomness) { - // Add 16 pawns flags + empty cmove + stage == 1: - return ChessRules.GenRandInitFen(randomness) - .slice(0, -2) + "1111111111111111 - - 1"; + static GenRandInitFen(options) { + const baseFen = ChessRules.GenRandInitFen(options.randomness); + return ( + // Add 16 pawns flags + empty cmove + stage == 1: + baseFen.slice(0, -2) + "1111111111111111 - - 1" + + (!options["switch"] ? '-' : "") + ); } static ParseFen(fen) { @@ -620,7 +644,9 @@ export class Checkered1Rules extends ChessRules { } getStageFen() { - return (this.stage == 1 ? "1" : "2" + this.sideCheckered); + if (this.stage == 1) return "1" + (!this.canSwitch ? '-' : ""); + // Stage == 2: + return "2" + this.sideCheckered; } getFen() {