diff --git a/src/backend/Board.java b/src/backend/Board.java index 270678e..4ec9e04 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -21,9 +21,11 @@ public class Board { private boolean whiteRookQueensideMoved = false; private boolean blackRookKingsideMoved = false; private boolean blackRookQueensideMoved = false; + private boolean isInCheckState = false; + private boolean isCheckmateState = false; private ArrayList moveHistory = new ArrayList<>(); - private Piece getPieceAt(int x, int y) { + public Piece getPieceAt(int x, int y) { for (Piece piece : pieces) { if (piece.getX() == x && piece.getY() == y) { return piece; @@ -291,6 +293,14 @@ public class Board { public boolean isTurnWhite() { return isTurnWhite; } + + public boolean isInCheckState() { + return isInCheckState; + } + + public boolean isCheckmateState() { + return isCheckmateState; + } public void setPiece(boolean isWhite, PieceType type, int x, int y) { if (x < 0 || x >= width || y < 0 || y >= height) { @@ -577,16 +587,22 @@ public class Board { turnNumber++; isTurnWhite = !isTurnWhite; - // Check for checkmate or stalemate after the move - if (isCheckmate()) { - // Game over - checkmate - // You could set a game state flag here or trigger a UI event - System.out.println("Checkmate! " + (isTurnWhite ? "Black" : "White") + " wins!"); + // Vérifier si le roi est en échec + isInCheckState = isInCheck(isTurnWhite); + + // Vérifier si c'est un échec et mat ou un pat + if (isInCheckState) { + isCheckmateState = isCheckmate(); + if (isCheckmateState) { + System.out.println("Checkmate! " + (!isTurnWhite ? "White" : "Black") + " wins!"); + } else { + System.out.println("Check8 " + (isTurnWhite ? "white" : "Black") + "!"); + } } else if (isStalemate()) { - // Game over - stalemate - // You could set a game state flag here or trigger a UI event System.out.println("Stalemate! Game is a draw."); } + + } // Reset selection regardless of whether move was valid @@ -620,7 +636,10 @@ public class Board { } private boolean hasLegalMoves(boolean isWhite) { - for (Piece piece : pieces) { + // Créer une copie de la liste pour éviter les modifications concurrentes + ArrayList piecesToCheck = new ArrayList<>(pieces); + + for (Piece piece : piecesToCheck) { if (piece.isWhite() == isWhite && !getValidMoves(piece).isEmpty()) { return true; }