check-checkmates marius

This commit is contained in:
Marius MORLON 2025-05-15 09:12:04 +02:00
commit 520e61ce8f
1 changed files with 28 additions and 9 deletions

View File

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