);
}
- getPotentialMovesFrom([x, y]) {
+ getPotentialMovesFrom([x, y], noswitch) {
let standardMoves = super.getPotentialMovesFrom([x, y]);
if (this.stage == 1) {
const color = this.turn;
// King is treated differently: it never turn checkered
if (this.getPiece(x, y) == V.KING) {
// If at least one checkered piece, allow switching:
- if (this.board.some(b => b.some(cell => cell[0] == 'c'))) {
+ if (
+ !noswitch &&
+ this.board.some(b => b.some(cell => cell[0] == 'c'))
+ ) {
const oppCol = V.GetOppCol(color);
moves.push(
new Move({
)
)
) {
- const moves = this.getPotentialMovesFrom([i, j]);
+ const moves = this.getPotentialMovesFrom([i, j], "noswitch");
if (moves.length > 0) {
for (let k = 0; k < moves.length; k++)
if (this.filterValid([moves[k]]).length > 0) return true;
return this.getReserveMoves([x, y]);
// Standard moves
switch (this.getPiece(x, y)) {
- case 's': return super.getPotentialPawnMoves([x, y]);
+ case 's': return this.getPotentialPawnMoves([x, y]);
case 'u': return super.getPotentialRookMoves([x, y]);
case 'o': return super.getPotentialKnightMoves([x, y]);
case 'c': return super.getPotentialBishopMoves([x, y]);
getPotentialPawnMoves(sq) {
let moves = super.getPotentialPawnMoves(sq);
- moves.forEach(m => {
- if (m.vanish[0].p == 's' && m.appear[0].p != 's') {
- // Promotion pieces should be non-violent as well:
- const pIdx = ChessRules.PIECES.findIndex(p => p == m.appear[0].p)
- m.appear[0].p = V.NON_VIOLENT[pIdx];
- }
- });
+ if (moves.length > 0 && moves[0].vanish[0].p == 's') {
+ // Remove captures for non-violent pawns:
+ moves = moves.filter(m => m.vanish.length == 1);
+ moves.forEach(m => {
+ if (m.appear[0].p != 's') {
+ // Promotion pieces should be non-violent as well:
+ const pIdx = ChessRules.PIECES.findIndex(p => p == m.appear[0].p)
+ m.appear[0].p = V.NON_VIOLENT[pIdx];
+ }
+ });
+ }
return moves;
}
this.kingPos[oppCol] = [move.vanish[1].x, move.vanish[1].y];
}
+ underCheck(color) {
+ if (this.kingPos[color][0] < 0) return false;
+ return super.underCheck(color);
+ }
+
getCurrentScore() {
const color = this.turn;
if (this.kingPos[color][0] < 0)