import { ChessRules, Move, PiPo } from "@/base_rules";
-export class Checkered1Rules extends ChessRules {
+export class CheckeredRules extends ChessRules {
static board2fen(b) {
const checkered_codes = {
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:
// 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);
}
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;
}
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);
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) {
}
getStageFen() {
- return (this.stage == 1 ? "1" : "2" + this.sideCheckered);
+ if (this.stage == 1) return "1" + (!this.canSwitch ? '-' : "");
+ // Stage == 2:
+ return "2" + this.sideCheckered;
}
getFen() {