return undefined; //default
}
+ // king can be l or L (on the other mirror side)
+ static IsGoodPosition(position) {
+ if (position.length == 0) return false;
+ const rows = position.split("/");
+ if (rows.length != V.size.x) return false;
+ let kings = { "k": 0, "K": 0, 'l': 0, 'L': 0 };
+ for (let row of rows) {
+ let sumElts = 0;
+ for (let i = 0; i < row.length; i++) {
+ if (['K','k','L','l'].includes(row[i])) kings[row[i]]++;
+ if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
+ else {
+ const num = parseInt(row[i]);
+ if (isNaN(num)) return false;
+ sumElts += num;
+ }
+ }
+ if (sumElts != V.size.y) return false;
+ }
+ if (kings['k'] + kings['l'] != 1 || kings['K'] + kings['L'] != 1)
+ return false;
+ return true;
+ }
+
setOtherVariables(fen) {
super.setOtherVariables(fen);
const rows = V.ParseFen(fen).position.split("/");
m.vanish.length == 2 &&
this.board[m.end.x][m.end.y] == V.EMPTY
) {
- 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
- let van = m.vanish[1];
- if (mirrorSide == 1 && codes.includes(this.getPiece(van.x, van.y)))
- van.p = V.ALICE_CODES[van.p];
- else if (
- mirrorSide == 2 &&
- pieces.includes(this.getPiece(van.x, van.y))
- )
- van.p = V.ALICE_PIECES[van.p];
+ m.vanish[1].c = V.GetOppCol(this.turn);
+ const [epX, epY] = [m.vanish[1].x, m.vanish[1].y];
+ m.vanish[1].p = this.getPiece(epX, epY);
}
return true;
});