Estoy construyendo un juego de ajedrez, ahora estoy implementando un control. aquí está mi implementación:
export function check(position, color) { let king; position.forEach((row) => { row.forEach((piece) => { if (piece.symbol == "k" && piece.color == color) king = piece; }); }); getAllLegalMoves(position, color === "w" ? "b" : "w").forEach((el) => { if (el.row == king.row && el.col == king.col) { return true; } }); return false; }la función hace lo siguiente:
aquí está el código para dejar caer la pieza en el nuevo cuadrado:
document.addEventListener("drop", function (event) { const { row, col } = dragged.parentNode.dataset; const piece = position[row][col]; if (!piece.canMoveTo(position, event.target.dataset) || piece.color != turn) return; piece.movePiece(position, event.target.dataset); if (check(position, turn)) console.log("check"); dragged.parentNode.removeChild(dragged); event.target.appendChild(dragged); if (turn == "w") turn = "b"; else turn = "w"; });primero verifico si la pieza puede moverse a la nueva casilla, si es así, muevo la pieza y compruebo que el jugador que movió la pieza está en jaque, si es así, registro la verificación, pero siempre está registrando falso. Puedes ayudarme por favor. Gracias.
Mi primera observación sería que está devolviendo verdadero desde su función forEach, que no hace nada. Entonces estás devolviendo falso siempre sin importar qué. Prueba esto:
export function check(position, color) { let king; position.forEach((row) => { row.forEach((piece) => { if (piece.symbol == "k" && piece.color == color) king = piece; }); }); return getAllLegalMoves(position, color === "w" ? "b" : "w").reduce((carry, el) => { if (carry) return carry; return el.row == king.row && el.col == king.col; }, false); }aquí está la respuesta:
export function check(position, color) { let king, inCheck = false; position.forEach((row) => { row.forEach((piece) => { if (piece.symbol == "k" && piece.color == color) king = piece; }); }); getAllLegalMoves(position, color === "w" ? "b" : "w").forEach((el) => { if (el.row == king.row && el.col == king.col) { inCheck = true; } }); return inCheck; }