static get CanAnalyze() {
return true;
}
+ // Patch: issues with javascript OOP, objects can't access static fields.
+ get canAnalyze() {
+ return V.CanAnalyze;
+ }
// 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) {
- return b; //usual pieces in pieces/ folder
+ get showMoves() {
+ return V.ShowMoves;
}
// Turn "wb" into "B" (for FEN)
return V.CoordToColumn(coords.y) + (V.size.x - coords.x);
}
+ // Path to pieces
+ getPpath(b) {
+ return b; //usual pieces in pieces/ folder
+ }
+
// Aggregates flags into one object
aggregateFlags() {
return this.castleFlags;
pieces[c][knight2Pos] = "n";
pieces[c][rook2Pos] = "r";
}
+ // Add turn + flags + enpassant
return (
pieces["b"].join("") +
"/pppppppp/8/8/8/8/PPPPPPPP/" +
pieces["w"].join("").toUpperCase() +
" w 0 1111 -"
- ); //add turn + flags + enpassant
+ );
}
// "Parse" FEN: just return untransformed string data
for (let indexInRow = 0; indexInRow < rows[i].length; indexInRow++) {
const character = rows[i][indexInRow];
const num = parseInt(character);
+ // If num is a number, just shift j:
if (!isNaN(num)) j += num;
- //just shift j
- //something at position i,j
+ // Else: something at position i,j
else board[i][j++] = V.fen2board(character);
}
}
// INITIALIZATION
constructor(fen) {
- this.re_init(fen);
+ // In printDiagram() fen isn't supply because only getPpath() is used
+ if (fen)
+ this.re_init(fen);
}
// Fen string fully describes the game state
// After move is played, update variables + flags
updateVariables(move) {
let piece = undefined;
+ // TODO: update variables before move is played, and just use this.turn ?
+ // (doesn't work in general, think MarseilleChess)
let c = undefined;
if (move.vanish.length >= 1) {
// Usual case, something is moved
piece = move.appear[0].p;
c = move.appear[0].c;
}
- if (c == "c") {
- //if (!["w","b"].includes(c))
- // 'c = move.vanish[0].c' doesn't work for Checkered
+ if (!['w','b'].includes(c)) {
+ // Checkered, for example
c = V.GetOppCol(this.turn);
}
const firstRank = c == "w" ? V.size.x - 1 : 0;
// TODO: un-ambiguous notation (switch on piece type, check directions...)
getNotation(move) {
if (move.appear.length == 2 && move.appear[0].p == V.KING)
- //castle
+ // Castle
return move.end.y < move.start.y ? "0-0-0" : "0-0";
// Translate final square
// Capture
const startColumn = V.CoordToColumn(move.start.y);
notation = startColumn + "x" + finalSquare;
- } //no capture
+ }
else notation = finalSquare;
if (move.appear.length > 0 && move.appear[0].p != V.PAWN)
- //promotion
+ // Promotion
notation += "=" + move.appear[0].p.toUpperCase();
return notation;
}