import { ChessRules, PiPo, Move } from "@/base_rules";
+import { SuicideRules } from "@/variants/Suicide";
export class SuctionRules extends ChessRules {
+
+ static get PawnSpecs() {
+ return Object.assign(
+ {},
+ ChessRules.PawnSpecs,
+ // No promotions:
+ { promotions: [V.PAWN] }
+ );
+ }
+
static get HasFlags() {
return false;
}
filterValid(moves) {
if (moves.length == 0) return [];
- const color = this.turn;
return moves.filter(m => {
const L = this.cmoves.length; //at least 1: init from FEN
return !this.oppositeMoves(this.cmoves[L - 1], m);
});
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add empty cmove:
- return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "- -";
+ return SuicideRules.GenRandInitFen(options) + " -";
}
getCmoveFen() {
postPlay(move) {
super.postPlay(move);
- if (move.vanish.length == 2) {
- // Was opponent king swapped?
- if (move.vanish[1].p == V.KING)
- this.kingPos[this.turn] = [move.appear[1].x, move.appear[1].y];
- }
+ // Was opponent king swapped?
+ if (move.vanish.length == 2 && move.vanish[1].p == V.KING)
+ this.kingPos[this.turn] = [move.appear[1].x, move.appear[1].y];
this.cmoves.push(this.getCmove(move));
}
postUndo(move) {
super.postUndo(move);
- if (move.appear.length == 2) {
- if (move.appear[1].p == V.KING)
- this.kingPos[move.vanish[1].c] = [move.vanish[1].x, move.vanish[1].y];
- }
+ if (move.appear.length == 2 && move.appear[1].p == V.KING)
+ this.kingPos[move.vanish[1].c] = [move.vanish[1].x, move.vanish[1].y];
this.cmoves.pop();
}
finalSquare
);
}
+
};