From 8c5a2880350015abb395592be66e841329003b88 Mon Sep 17 00:00:00 2001 From: HP Date: Mon, 19 May 2025 17:51:27 +0200 Subject: [PATCH] findKingposition but unused for now --- src/backend/Board.java | 56 +++++++++++++++++++---------------- src/backend/CheckManager.java | 50 ------------------------------- 2 files changed, 30 insertions(+), 76 deletions(-) delete mode 100644 src/backend/CheckManager.java diff --git a/src/backend/Board.java b/src/backend/Board.java index 231dc65..d085f01 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -1,7 +1,6 @@ package backend; import java.util.ArrayList; -import java.util.Stack; public class Board { @@ -442,6 +441,32 @@ private boolean isEnemy(int x, int y, boolean isWhite) { } +public boolean isKingInCheck(boolean isWhite) { + // find king position + int kingX = 1, kingY = 1; + for (Piece p : pieces) { + if (p.isWhite() == isWhite && p.getType() == PieceType.King) { + kingX = p.getX(); + kingY = p.getY(); + System.out.println("kingfound"); + break; + } + } + // Generate and test enemies moves + for (Piece enemy : pieces) { + if (enemy.isWhite() != isWhite) { + ArrayList moves = computeLegalMoves(enemy); + for (int[] move : moves) { + if (move[0] == kingX && move[1] == kingY) { + return true; // king in check + } + } + } + } + System.out.println("kingfound"); + return false; // king is not in check +} + public ArrayList computeLegalMoves(Piece piece) { ArrayList moves = new ArrayList<>(); int x = piece.getX(); @@ -471,6 +496,7 @@ public ArrayList computeLegalMoves(Piece piece) { if (isEnemy(x + 1, nextY, piece.isWhite())) { moves.add(new int[]{x + 1, nextY}); } + if (y==7){ setPiece(false , PieceType.Queen, x,y); pieces.remove(piece); @@ -480,6 +506,7 @@ public ArrayList computeLegalMoves(Piece piece) { setPiece(true , PieceType.Queen, x,y); pieces.remove(piece); } + // En passant if (enPassantTarget != null) { int targetX = enPassantTarget[0]; @@ -488,7 +515,7 @@ public ArrayList computeLegalMoves(Piece piece) { if(!piece.isWhite() && y==4 && targetY==5 && Math.abs(x-targetX)==1) { moves.add(new int[] {targetX, targetY}); } - } + } } if (type == PieceType.Rook) { @@ -580,31 +607,8 @@ public ArrayList computeLegalMoves(Piece piece) { } } } - + } - - return moves; } -public int[] findKingPosition(boolean isWhite) { - for (Piece piece : pieces) { - if (piece.getType() == PieceType.King && piece.isWhite() == isWhite) { - return new int[]{piece.getX(), piece.getY()}; - } - } - return null; // Erreur : le roi n'a pas été trouvé (ne devrait pas arriver) -} - -public ArrayList getAllMoves(boolean isWhite) { - ArrayList allMoves = new ArrayList<>(); - for (Piece piece : pieces) { - if (piece.isWhite() == isWhite) { - ArrayList moves = computeLegalMoves(piece); - for (int[] move : moves) { - allMoves.add(new int[]{piece.getX(), piece.getY(), move[0], move[1]}); - } - } - } - return allMoves; -} } \ No newline at end of file diff --git a/src/backend/CheckManager.java b/src/backend/CheckManager.java deleted file mode 100644 index d80be72..0000000 --- a/src/backend/CheckManager.java +++ /dev/null @@ -1,50 +0,0 @@ -package backend; - -import java.util.ArrayList; - -public class CheckManager { - private Board board; - - - public CheckManager(Board board) { - this.board = board; - } - - // Check if the king of a given color is in check - public boolean isKingInCheck(boolean isWhite) { - int[] kingPosition = board.findKingPosition(isWhite); // You must implement this - for (Piece piece : board.getPieces()) { - if (piece.isWhite() != isWhite) { - ArrayList enemyMoves = board.computeLegalMoves(piece); // you already have this? - for (int[] move : enemyMoves) { - if (move[0] == kingPosition[0] && move[1] == kingPosition[1]) { - return true; - } - } - } - } - return false; - } - - // Filter out illegal moves (those that leave king in check) - public ArrayList getLegalMovesFiltered(boolean isWhite) { - ArrayList allMoves = board.getAllMoves(isWhite); // You must write this or adapt it - ArrayList legalMoves = new ArrayList<>(); - - for (int[] move : allMoves) { - // board.makeMove(move); // Simulate move - boolean inCheck = isKingInCheck(isWhite); - // board.undoMove(); // Undo move - if (!inCheck) { - legalMoves.add(move); - } - } - - return legalMoves; - } - - public boolean isCheckmate(boolean isWhite) { - if (!isKingInCheck(isWhite)) return false; - return getLegalMovesFiltered(isWhite).isEmpty(); - } -}