auto player ia

This commit is contained in:
Gaspard VANCOMPERNOLLE 2025-05-07 15:15:10 +02:00
parent 7a49ade79c
commit bdf56dc250
3 changed files with 72 additions and 17 deletions

View File

@ -1,17 +1,39 @@
package backend;
import java.util.ArrayList;
import java.util.Random;
public class AutoPlayer {
private Random rand = new Random();
public Move computeBestMove(Board board) {
ArrayList<Move> possibleMoves = new ArrayList<>();
boolean whiteTurn = board.isTurnWhite();
/**
* returns the best Move to try on provided board for active player
* @param board
* @return
*/
public Move computeBestMove(Board board) {
for (Piece p : board.getPieces()) {
if (p.isWhite() == whiteTurn) {
ArrayList<int[]> moves = Move.getPossibleMoves(board, p);
for (int[] pos : moves) {
int toX = pos[0];
int toY = pos[1];
Piece captured = board.getPieceAt(toX, toY);
Move move = new Move(p, p.getX(), p.getY(), toX, toY, captured);
possibleMoves.add(move);
}
}
}
return null;
}
// Si aucune possibilité => null
if (possibleMoves.isEmpty()) return null;
// Cherche un coup qui capture une pièce
for (Move m : possibleMoves) {
if (m.getCapturedPiece() != null) {
return m;
}
}
// Sinon, retourne un coup aléatoire
return possibleMoves.get(rand.nextInt(possibleMoves.size()));
}
}

View File

@ -255,10 +255,42 @@ public class Board {
}
public void playMove(Move move) {
//TODO
if (move == null) return;
Piece pieceToMove = getPieceAt(move.getFromX(), move.getFromY());
if (pieceToMove == null) return;
// Supprimer la pièce d'origine
pieces.remove(pieceToMove);
// Supprimer la pièce capturée (si elle existe)
Piece captured = getPieceAt(move.getToX(), move.getToY());
if (captured != null) {
pieces.remove(captured);
}
// Ajouter la nouvelle position
Piece newPiece = new Piece(
pieceToMove.getType(),
pieceToMove.isWhite(),
move.getToX(),
move.getToY()
);
pieces.add(newPiece);
// Enregistrer dans l'historique pour undo
moveHistory.add(move);
// Fin de tour
turnNumber++;
// Désélection et surlignage off
selectedX = -1;
selectedY = -1;
highlightedSquares.clear();
}
public Piece getPieceAt(int x, int y) {
for (Piece p : pieces) {
if (p.getX() == x && p.getY() == y) {

View File

@ -48,9 +48,10 @@ public class Game extends Thread {
}
private void aiPlayerTurn() {
if(isAITurn()) {
board.playMove(aiPlayer.computeBestMove(new Board(board)));
}
if(isAITurn()) {
Move m = aiPlayer.computeBestMove(board);
board.playMove(m);
}
}
public void clickCoords(int x, int y) {