const pieces = Object.keys(V.ALICE_CODES);
const codes = Object.keys(V.ALICE_PIECES);
const mirrorSide = (pieces.includes(this.getPiece(x,y)) ? 1 : 2);
+ const color = this.getColor(x,y);
// Search valid moves on sideBoard
let saveBoard = this.board;
this.board = sideBoard || this.getSideBoard(mirrorSide);
- let moves = super.getPotentialMovesFrom([x,y]);
+ let moves = super.getPotentialMovesFrom([x,y])
+ .filter(m => {
+ // Filter out king moves which result in under-check position on
+ // current board (before mirror traversing)
+ let aprioriValid = true;
+ if (m.appear[0].p == V.KING)
+ {
+ this.play(m);
+ if (this.underCheck(color))
+ aprioriValid = false;
+ this.undo(m);
+ }
+ return aprioriValid;
+ });
this.board = saveBoard;
// Finally filter impossible moves
if (m.vanish[0].p == V.PAWN && m.vanish.length == 2
&& this.board[m.end.x][m.end.y] == V.EMPTY)
{
- m.vanish[1].c = this.getOppCol(this.getColor(x,y));
+ m.vanish[1].c = V.GetOppCol(this.getColor(x,y));
// In the special case of en-passant, if
// - board1 takes board2 : vanish[1] --> Alice
// - board2 takes board1 : vanish[1] --> normal
getAllValidMoves()
{
const color = this.turn;
- const oppCol = this.getOppCol(color);
+ const oppCol = V.GetOppCol(color);
var potentialMoves = [];
let sideBoard = [this.getSideBoard(1), this.getSideBoard(2)];
for (var i=0; i<V.size.x; i++)
const mirrorSide = (sideBoard[0][kp[0]][kp[1]] != V.EMPTY ? 1 : 2);
let saveBoard = this.board;
this.board = sideBoard[mirrorSide-1];
- let res = this.isAttacked(kp, [this.getOppCol(color)]);
+ let res = this.isAttacked(kp, [V.GetOppCol(color)]);
this.board = saveBoard;
return res;
}
let sideBoard = this.getSideBoard(mirrorSide);
let saveBoard = this.board;
this.board = sideBoard;
- let res = this.isAttacked(this.kingPos[color], [this.getOppCol(color)])
+ let res = this.isAttacked(this.kingPos[color], [V.GetOppCol(color)])
? [ JSON.parse(JSON.stringify(this.kingPos[color])) ]
: [ ];
this.board = saveBoard;
let saveBoard = this.board;
this.board = sideBoard;
let res = "*";
- if (!this.isAttacked(this.kingPos[color], [this.getOppCol(color)]))
+ if (!this.isAttacked(this.kingPos[color], [V.GetOppCol(color)]))
res = "1/2";
else
res = (color == "w" ? "0-1" : "1-0");
const captureMark = (move.vanish.length > move.appear.length ? "x" : "");
let pawnMark = "";
if (["p","s"].includes(piece) && captureMark.length == 1)
- pawnMark = V.GetColumn(move.start.y); //start column
+ pawnMark = V.CoordToColumn(move.start.y); //start column
// Piece or pawn movement
let notation = piece.toUpperCase() + pawnMark + captureMark + finalSquare;
return notation;
}
}
-
-const VariantRules = AliceRules;