findKingposition but unused for now
This commit is contained in:
parent
595ca18c90
commit
8c5a288035
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue