Fix Alice rules (en passant)
authorBenjamin Auder <benjamin.auder@somewhere>
Thu, 16 Apr 2020 15:35:12 +0000 (17:35 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Thu, 16 Apr 2020 15:35:12 +0000 (17:35 +0200)
client/src/base_rules.js
client/src/variants/Alice.js

index 53001f6..ec949fc 100644 (file)
@@ -807,7 +807,6 @@ export const ChessRules = class ChessRules {
         this.getEnpassantCaptures([x, y], pawnShiftX)
       );
     }
         this.getEnpassantCaptures([x, y], pawnShiftX)
       );
     }
-
     return pMoves;
   }
 
     return pMoves;
   }
 
index 3fd02a3..57de568 100644 (file)
@@ -191,6 +191,31 @@ export class AliceRules extends ChessRules {
     return res;
   }
 
     return res;
   }
 
+  getEnpassantCaptures([x, y], shiftX) {
+    const Lep = this.epSquares.length;
+    const epSquare = this.epSquares[Lep - 1]; //always at least one element
+    let enpassantMove = null;
+    if (
+      !!epSquare &&
+      epSquare.x == x + shiftX &&
+      Math.abs(epSquare.y - y) == 1
+    ) {
+      enpassantMove = this.getBasicMove([x, y], [epSquare.x, epSquare.y]);
+      // May capture in same world or different:
+      const capturedPiece =
+        this.board[x][epSquare.y] != V.EMPTY
+          ? this.getPiece(x, epSquare.y)
+          : ['p','s'][1 - "ps".indexOf(this.getPiece(x, y))];
+      enpassantMove.vanish.push({
+        x: x,
+        y: epSquare.y,
+        p: capturedPiece,
+        c: V.GetOppCol(this.turn)
+      });
+    }
+    return !!enpassantMove ? [enpassantMove] : [];
+  }
+
   filterValid(moves, sideBoard) {
     if (moves.length == 0) return [];
     if (!sideBoard) sideBoard = [this.getSideBoard(1), this.getSideBoard(2)];
   filterValid(moves, sideBoard) {
     if (moves.length == 0) return [];
     if (!sideBoard) sideBoard = [this.getSideBoard(1), this.getSideBoard(2)];