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 blackRookKingsideMoved = false;
private boolean blackRookQueensideMoved = false;
private boolean isInCheckState = false;
private boolean isCheckmateState = false;
private ArrayList<Move> 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;
@ -292,6 +294,14 @@ public class Board {
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) {
return;
@ -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<Piece> piecesToCheck = new ArrayList<>(pieces);
for (Piece piece : piecesToCheck) {
if (piece.isWhite() == isWhite && !getValidMoves(piece).isEmpty()) {
return true;
}