Draft code reorganisation (+ fix Alice rules + stateless VariantRules object)
[vchess.git] / public / javascripts / variants / Alice.js
index 2be714f..57c7b25 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
@@ -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;