import { ChessRules } from "@/base_rules";
export class ArenaRules extends ChessRules {
+
+ static get Lines() {
+ return [
+ [[2, 0], [2, 8]],
+ [[6, 0], [6, 8]]
+ ];
+ }
+
static get HasFlags() {
return false;
}
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-";
+ static IsGoodPosition(position) {
+ if (position.length == 0) return false;
+ const rows = position.split("/");
+ if (rows.length != V.size.x) return false;
+ // At most and at least one king or queen per color
+ let royals = { "k": 0, "K": 0, "q": 0, "Q": 0 };
+ for (let row of rows) {
+ let sumElts = 0;
+ for (let i = 0; i < row.length; i++) {
+ if (['K','k','Q','q'].includes(row[i])) royals[row[i]]++;
+ if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
+ else {
+ const num = parseInt(row[i], 10);
+ if (isNaN(num)) return false;
+ sumElts += num;
+ }
+ }
+ if (sumElts != V.size.y) return false;
+ }
+ if (
+ Object.values(royals).some(v => v >= 2) ||
+ royals['K'] + royals['Q'] == 0 ||
+ royals['k'] + royals['q'] == 0
+ ) {
+ return false;
+ }
+ return true;
+ }
+
+ scanKings() {}
+
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).slice(0, -6) + "-";
}
static InArena(x) {
}
getPotentialQueenMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- ).filter(m => {
- // Filter out moves longer than 3 squares
- return Math.max(
- Math.abs(m.end.x - m.start.x),
- Math.abs(m.end.y - m.start.y)) <= 3;
- });
+ return super.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3);
}
getPotentialKingMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- ).filter(m => {
- // Filter out moves longer than 3 squares
- return Math.max(
- Math.abs(m.end.x - m.start.x),
- Math.abs(m.end.y - m.start.y)) <= 3;
- });
+ return super.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3);
}
getCheckSquares() {
return moves;
}
+ postPlay() {} //no kingPos no castleFlags
+ postUndo() {}
+
getCurrentScore() {
const color = this.turn;
if (!this.atLeastOneMove())
static get SEARCH_DEPTH() {
return 4;
}
+
};