);
}
- hoverHighlight(x, y) {
+ hoverHighlight([x, y]) {
const c = this.turn;
return (
this.movesCount <= 1 &&
const color = this.turn;
if (this.movesCount <= 1) {
// Just put the king on the board
- let moves = [];
const firstRank = (color == 'w' ? 7 : 0);
return [...Array(8)].map((x, j) => {
return new Move({
}
filterValid(moves) {
+ if (this.movesCount <= 1) return moves;
const color = this.turn;
return moves.filter(m => {
- if (m.vanish.length == 0) return true;
+ if (m.vanish.length == 0) {
+ // subTurn == 0: need to check if a move exists at subTurn == 1
+ this.play(m);
+ const res = this.filterValid(this.getAllPotentialMoves()).length > 0;
+ this.undo(m);
+ return res;
+ }
const start = { x: m.vanish[0].x, y: m.vanish[0].y };
const end = { x: m.appear[0].x, y: m.appear[0].y };
if (start.x == end.x && start.y == end.y) {
}
return false;
};
- if (this.subTurn == 0) return true; //always one reserve for an undefined
- if (!super.atLeastOneMove()) return atLeastOneReserveMove();
- return true;
+ if (this.subTurn == 0) return atLeastOneReserveMove();
+ const canMoveSomething = super.atLeastOneMove();
+ if (this.subTurn == 2) return canMoveSomething;
+ return (canMoveSomething || atLeastOneReserveMove());
}
underCheck(color) {
this.movesCount--;
this.postUndo(move);
};
- if (this.movesCount <= 2) toPrevPlayer();
+ if (this.movesCount <= 2 && move.appear[0].p == V.KING) toPrevPlayer();
else if (move.vanish.length == 0) {
this.reserve[this.turn][move.start.p]++;
this.subTurn = move.turn[1];