rename getOppCol into static GetOppCol + start thinking about problems page
[vchess.git] / public / javascripts / variants / Alice.js
index 2788e21..3a61358 100644 (file)
@@ -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
@@ -172,7 +186,7 @@ class AliceRules extends ChessRules
        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++)
@@ -233,7 +247,7 @@ class AliceRules extends ChessRules
                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;
        }
@@ -246,7 +260,7 @@ class AliceRules extends ChessRules
                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;
@@ -285,7 +299,7 @@ class AliceRules extends ChessRules
                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");