check-checkmates marius
This commit is contained in:
commit
520e61ce8f
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue