AI autoplayer

This commit is contained in:
g.levassor--gentil 2025-05-06 16:30:32 +02:00
parent ccd3dacaed
commit eb25480118
2 changed files with 69 additions and 14 deletions

View File

@ -1,17 +1,72 @@
package backend; package backend;
import java.util.ArrayList;
public class AutoPlayer { public class AutoPlayer {
public Move computeBestMove(Board board) {
ArrayList<Move> allMoves = new ArrayList<>();
boolean isWhite = board.isTurnWhite();
/** for (Piece piece : board.getPieces()) {
* returns the best Move to try on provided board for active player if (piece.isWhite() != isWhite) continue;
* @param board ArrayList<int[]> legalMoves = getLegalMoves(board, piece);
* @return for (int[] move : legalMoves) {
*/ Piece target = getPieceAt(board, move[0], move[1]);
public Move computeBestMove(Board board) { Move candidate = new Move(
piece.getType(), piece.isWhite(),
piece.getX(), piece.getY(),
move[0], move[1],
target
);
allMoves.add(candidate);
}
}
return null; // Evaluate moves
} Move bestMove = null;
int bestScore = Integer.MIN_VALUE;
for (Move move : allMoves) {
int score = evaluateMove(move);
if (score > bestScore) {
bestScore = score;
bestMove = move;
}
}
return bestMove;
}
private int evaluateMove(Move move) {
if (move.getCapturedPiece() != null) {
return pieceValue(move.getCapturedPiece().getType());
}
return 0;
}
private int pieceValue(PieceType type) {
switch (type) {
case Pawn: return 1;
case Knight: return 3;
case Bishop: return 3;
case Rook: return 5;
case Queen: return 9;
case King: return 100; // just in case
default: return 0;
}
}
private ArrayList<int[]> getLegalMoves(Board board, Piece piece) {
// Reuse board's internal method
// But we must simulate access: simulate selection, compute, and reset
return board.computeLegalMoves(piece);
}
private Piece getPieceAt(Board board, int x, int y) {
for (Piece p : board.getPieces()) {
if (p.getX() == x && p.getY() == y) return p;
}
return null;
}
} }

View File

@ -410,7 +410,7 @@ private boolean isEnemy(int x, int y, boolean isWhite) {
return p != null && p.isWhite() != isWhite; return p != null && p.isWhite() != isWhite;
} }
private 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();
int y = piece.getY(); int y = piece.getY();