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;
// 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;
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();
}
///////////////
// What is the score ? (Interesting if game is over)
getCurrentScore() {
if (this.atLeastOneMove())
- // game not over
return "*";
// Game over
// 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;
}