//////////////
// MISC UTILS
+ // Some variants don't have flags:
static get HasFlags() {
return true;
- } //some variants don't have flags
+ }
+ // Some variants don't have en-passant
static get HasEnpassant() {
return true;
- } //some variants don't have ep.
+ }
+
+ // Some variants cannot have analyse mode
+ static get CanAnalyze() {
+ return true;
+ }
+
+ // Some variants show incomplete information,
+ // and thus show only a partial moves list or no list at all.
+ static get ShowMoves() {
+ return "all";
+ }
// Path to pieces
static getPpath(b) {
if (position.length == 0) return false;
const rows = position.split("/");
if (rows.length != V.size.x) return false;
+ let kings = {};
for (let row of rows) {
let sumElts = 0;
for (let i = 0; i < row.length; i++) {
+ if (['K','k'].includes(row[i]))
+ kings[row[i]] = true;
if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
else {
const num = parseInt(row[i]);
}
if (sumElts != V.size.y) return false;
}
+ // Both kings should be on board:
+ if (Object.keys(kings).length != 2)
+ return false;
return true;
}
if (V.HasEnpassant) {
const epSq =
parsedFen.enpassant != "-"
- ? V.SquareToCoords(parsedFen.enpassant)
+ ? this.getEpSquare(parsedFen.enpassant)
: undefined;
this.epSquares = [epSq];
}
const oppCol = V.GetOppCol(c);
let moves = [];
let i = 0;
+ // King, then rook:
const finalSquares = [
[2, 3],
[V.size.y - 2, V.size.y - 3]
- ]; //king, then rook
+ ];
castlingCheck: for (
let castleSide = 0;
castleSide < 2;
play(move) {
// DEBUG:
- // if (!this.states) this.states = [];
- // const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen();
- // this.states.push(stateFen);
+// if (!this.states) this.states = [];
+// const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen();
+// this.states.push(stateFen);
if (V.HasFlags) move.flags = JSON.stringify(this.aggregateFlags()); //save flags (for undo)
if (V.HasEnpassant) this.epSquares.push(this.getEpSquare(move));
this.unupdateVariables(move);
// DEBUG:
- // const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen();
- // if (stateFen != this.states[this.states.length-1]) debugger;
- // this.states.pop();
+// const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen();
+// if (stateFen != this.states[this.states.length-1]) debugger;
+// this.states.pop();
}
///////////////