findKingposition but unused for now

This commit is contained in:
HP 2025-05-19 17:51:27 +02:00
parent 595ca18c90
commit 8c5a288035
2 changed files with 30 additions and 76 deletions

View File

@ -1,7 +1,6 @@
package backend; package backend;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Stack;
public class Board { 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<int[]> 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<int[]> computeLegalMoves(Piece piece) { public ArrayList<int[]> computeLegalMoves(Piece piece) {
ArrayList<int[]> moves = new ArrayList<>(); ArrayList<int[]> moves = new ArrayList<>();
int x = piece.getX(); int x = piece.getX();
@ -471,6 +496,7 @@ public ArrayList<int[]> computeLegalMoves(Piece piece) {
if (isEnemy(x + 1, nextY, piece.isWhite())) { if (isEnemy(x + 1, nextY, piece.isWhite())) {
moves.add(new int[]{x + 1, nextY}); moves.add(new int[]{x + 1, nextY});
} }
if (y==7){ if (y==7){
setPiece(false , PieceType.Queen, x,y); setPiece(false , PieceType.Queen, x,y);
pieces.remove(piece); pieces.remove(piece);
@ -480,6 +506,7 @@ public ArrayList<int[]> computeLegalMoves(Piece piece) {
setPiece(true , PieceType.Queen, x,y); setPiece(true , PieceType.Queen, x,y);
pieces.remove(piece); pieces.remove(piece);
} }
// En passant // En passant
if (enPassantTarget != null) { if (enPassantTarget != null) {
int targetX = enPassantTarget[0]; int targetX = enPassantTarget[0];
@ -582,29 +609,6 @@ public ArrayList<int[]> computeLegalMoves(Piece piece) {
} }
} }
return moves; 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<int[]> getAllMoves(boolean isWhite) {
ArrayList<int[]> allMoves = new ArrayList<>();
for (Piece piece : pieces) {
if (piece.isWhite() == isWhite) {
ArrayList<int[]> moves = computeLegalMoves(piece);
for (int[] move : moves) {
allMoves.add(new int[]{piece.getX(), piece.getY(), move[0], move[1]});
}
}
}
return allMoves;
}
} }

View File

@ -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<int[]> 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<int[]> getLegalMovesFiltered(boolean isWhite) {
ArrayList<int[]> allMoves = board.getAllMoves(isWhite); // You must write this or adapt it
ArrayList<int[]> 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();
}
}