X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAlice.js;h=04b4a3466169df2698bb236796ea41cdd636afdd;hb=b955c65b942d09d24b5c3bed0d755d4f2f8f71f1;hp=f7d2fa13422b189e3258bb6a923c8545d582184f;hpb=643479f8d7c3622b57fc49c4f10d9950793ebf4f;p=vchess.git diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index f7d2fa13..04b4a346 100644 --- a/public/javascripts/variants/Alice.js +++ b/public/javascripts/variants/Alice.js @@ -95,11 +95,25 @@ class AliceRules extends ChessRules 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 @@ -140,7 +154,7 @@ class AliceRules extends ChessRules 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 @@ -160,13 +174,19 @@ class AliceRules extends ChessRules if (moves.length == 0) return []; let sideBoard = [this.getSideBoard(1), this.getSideBoard(2)]; - return moves.filter(m => { return !this.underCheck(m, sideBoard); }); + const color = this.turn; + return moves.filter(m => { + this.playSide(m, sideBoard); //no need to track flags + const res = !this.underCheck(color, sideBoard); + this.undoSide(m, sideBoard); + return res; + }); } 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 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; @@ -336,5 +350,3 @@ class AliceRules extends ChessRules return notation; } } - -const VariantRules = AliceRules;