import { ChessRules } from "@/base_rules";
export const VariantRules = class ExtinctionRules extends ChessRules {
+ static IsGoodPosition(position) {
+ if (!ChessRules.IsGoodPosition(position))
+ return false;
+ // Also check that each piece type is present
+ const rows = position.split("/");
+ let pieces = {};
+ for (let row of rows) {
+ for (let i = 0; i < row.length; i++) {
+ if (isNaN(parseInt(row[i])) && !pieces[row[i]])
+ pieces[row[i]] = true;
+ }
+ }
+ if (Object.keys(pieces).length != 12)
+ return false;
+ return true;
+ }
+
setOtherVariables(fen) {
super.setOtherVariables(fen);
const pos = V.ParseFen(fen).position;
return true; //always at least one possible move
}
- underCheck() {
- return false; //there is no check
+ filterValid(moves) {
+ return moves; //there is no check
}
getCheckSquares() {
return [];
}
- updateVariables(move) {
- super.updateVariables(move);
+ postPlay(move) {
+ super.postPlay(move);
// Treat the promotion case: (not the capture part)
if (move.appear[0].p != move.vanish[0].p) {
this.material[move.appear[0].c][move.appear[0].p]++;
this.material[move.vanish[1].c][move.vanish[1].p]--;
}
- unupdateVariables(move) {
- super.unupdateVariables(move);
+ postUndo(move) {
+ super.postUndo(move);
if (move.appear[0].p != move.vanish[0].p) {
this.material[move.appear[0].c][move.appear[0].p]--;
this.material[move.appear[0].c][V.PAWN]++;
getCurrentScore() {
if (this.atLeastOneMove()) {
- // game not over?
+ // Game not over?
const color = this.turn;
if (
Object.keys(this.material[color]).some(p => {