X-Git-Url: https://git.auder.net/assets/icon_infos.svg?a=blobdiff_plain;f=client%2Fsrc%2Fbase_rules.js;h=e9ea7bc10e189f285100e5337b786f6b07805611;hb=9d15c433c207a2c3bb548d095939c3e08b4038fd;hp=e91a43e86fb5e9654a194229c23a439704dc9e8a;hpb=173f11dc3119c842a58daa9d1e0afc67eeb0e4e8;p=vchess.git diff --git a/client/src/base_rules.js b/client/src/base_rules.js index e91a43e8..e9ea7bc1 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -158,7 +158,7 @@ export const ChessRules = class ChessRules { // Turn "p" into "bp" (for board) static fen2board(f) { - return f.charCodeAt() <= 90 ? "w" + f.toLowerCase() : "b" + f; + return f.charCodeAt(0) <= 90 ? "w" + f.toLowerCase() : "b" + f; } // Check if FEN describes a board situation correctly @@ -275,7 +275,7 @@ export const ChessRules = class ChessRules { // En-passant square, if any getEpSquare(moveOrSquare) { - if (!moveOrSquare) return undefined; + if (!moveOrSquare) return undefined; //TODO: necessary line?! if (typeof moveOrSquare === "string") { const square = moveOrSquare; if (square == "-") return undefined; @@ -528,6 +528,7 @@ export const ChessRules = class ChessRules { } // Scan board for kings positions + // TODO: should be done from board, no need for the complete FEN scanKings(fen) { // Squares of white and black king: this.kingPos = { w: [-1, -1], b: [-1, -1] }; @@ -892,7 +893,6 @@ export const ChessRules = class ChessRules { // Castling ? const oppCol = V.GetOppCol(c); let moves = []; - let i = 0; // King, then rook: finalSquares = finalSquares || [ [2, 3], [V.size.y - 2, V.size.y - 3] ]; const castlingKing = this.board[x][y].charAt(1); @@ -919,7 +919,7 @@ export const ChessRules = class ChessRules { // Nothing on the path of the king ? (and no checks) const finDist = finalSquares[castleSide][0] - y; let step = finDist / Math.max(1, Math.abs(finDist)); - i = y; + let i = y; do { if ( (!castleInCheck && this.isAttacked([x, i], oppCol)) || @@ -1071,8 +1071,10 @@ export const ChessRules = class ChessRules { } if ( V.OnBoard(rx, ry) && + this.board[rx][ry] != V.EMPTY && this.getPiece(rx, ry) == piece && - this.getColor(rx, ry) == color + this.getColor(rx, ry) == color && + this.canTake([rx, ry], [x, y]) //for Paco-Sako (TODO: necessary?) ) { return true; } @@ -1172,6 +1174,7 @@ export const ChessRules = class ChessRules { } updateCastleFlags(move, piece, color) { + // TODO: check flags. If already off, no need to always re-evaluate const c = color || V.GetOppCol(this.turn); const firstRank = (c == "w" ? V.size.x - 1 : 0); // Update castling flags if rooks are moved