X-Git-Url: https://git.auder.net/js/rpsls.js?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAlice.js;h=57c7b25cf47b43d10b2eddfe2582267920f66f95;hb=b6487fb9c41705187cf97215fc9e8f86a59057c7;hp=2be714f0aba86c5f707c5e8df4871bc3376813de;hpb=f6dbe8e31a3260487664f1e0b50710b3f3efaf5f;p=vchess.git diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index 2be714f0..57c7b25c 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 @@ -324,7 +338,7 @@ class AliceRules extends ChessRules 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;