);
}
- isAttacked(sq, colors) {
+ isAttacked(sq, color) {
return (
- super.isAttacked(sq, colors) || this.isAttackedByAntiking(sq, colors)
+ super.isAttacked(sq, color) ||
+ this.isAttackedByAntiking(sq, color)
);
}
- isAttackedByKing([x, y], colors) {
- if (this.getPiece(x, y) == V.ANTIKING) return false; //antiking is not attacked by king
+ isAttackedByKing([x, y], color) {
+ // Antiking is not attacked by king:
+ if (this.getPiece(x, y) == V.ANTIKING) return false;
return this.isAttackedBySlideNJump(
[x, y],
- colors,
+ color,
V.KING,
V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
"oneStep"
);
}
- isAttackedByAntiking([x, y], colors) {
- if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false; //(anti)king is not attacked by antiking
+ isAttackedByAntiking([x, y], color) {
+ // (Anti)King is not attacked by antiking
+ if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false;
return this.isAttackedBySlideNJump(
[x, y],
- colors,
+ color,
V.ANTIKING,
V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
"oneStep"
underCheck(color) {
const oppCol = V.GetOppCol(color);
let res =
- this.isAttacked(this.kingPos[color], [oppCol]) ||
- !this.isAttacked(this.antikingPos[color], [oppCol]);
+ this.isAttacked(this.kingPos[color], oppCol) ||
+ !this.isAttacked(this.antikingPos[color], oppCol);
return res;
}
getCheckSquares(color) {
let res = super.getCheckSquares(color);
- if (!this.isAttacked(this.antikingPos[color], [V.GetOppCol(color)]))
+ if (!this.isAttacked(this.antikingPos[color], V.GetOppCol(color)))
res.push(JSON.parse(JSON.stringify(this.antikingPos[color])));
return res;
}
- updateVariables(move) {
- super.updateVariables(move);
+ postPlay(move) {
+ super.postPlay(move);
const piece = move.vanish[0].p;
const c = move.vanish[0].c;
// Update antiking position
}
}
- unupdateVariables(move) {
- super.unupdateVariables(move);
+ postUndo(move) {
+ super.postUndo(move);
const c = move.vanish[0].c;
if (move.vanish[0].p == V.ANTIKING)
this.antikingPos[c] = [move.start.x, move.start.y];
const color = this.turn;
const oppCol = V.GetOppCol(color);
if (
- !this.isAttacked(this.kingPos[color], [oppCol]) &&
- this.isAttacked(this.antikingPos[color], [oppCol])
+ !this.isAttacked(this.kingPos[color], oppCol) &&
+ this.isAttacked(this.antikingPos[color], oppCol)
) {
return "1/2";
}
);
}
- static GenRandInitFen() {
+ static GenRandInitFen(randomness) {
+ if (randomness == 0)
+ return "rnbqkbnr/pppppppp/3A4/8/8/3a4/PPPPPPPP/RNBQKBNR w 0 ahah -";
+
let pieces = { w: new Array(8), b: new Array(8) };
+ let flags = "";
let antikingPos = { w: -1, b: -1 };
for (let c of ["w", "b"]) {
+ if (c == 'b' && randomness == 1) {
+ pieces['b'] = pieces['w'];
+ antikingPos['b'] = antikingPos['w'];
+ flags += flags;
+ break;
+ }
+
let positions = ArrayFun.range(8);
// Get random squares for bishops, but avoid corners; because,
pieces[c][bishop2Pos] = "b";
pieces[c][knight2Pos] = "n";
pieces[c][rook2Pos] = "r";
+ flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos);
}
const ranks23_black =
"pppppppp/" +
ranks23_white +
"/" +
pieces["w"].join("").toUpperCase() +
- " w 0 1111 -"
+ " w 0 " + flags + " -"
);
}
+
+ static get SEARCH_DEPTH() {
+ return 2;
+ }
};