Modification AutoPlayer and Board(PlayMove)
This commit is contained in:
parent
c666978058
commit
d72eaae67a
|
|
@ -10,29 +10,25 @@ public class AutoPlayer {
|
|||
* @return
|
||||
*/
|
||||
public Move computeBestMove(Board board) {
|
||||
|
||||
List<Move> moves = board.getAllLegalMoves(board.isTurnWhite());
|
||||
Move bestMove = null;
|
||||
int bestScore = Integer.MIN_VALUE;
|
||||
List<Move> moves = board.getAllLegalMoves(board.isTurnWhite());
|
||||
Move bestMove = null;
|
||||
int bestScore = Integer.MIN_VALUE;
|
||||
|
||||
for (Move move : moves) {
|
||||
//Board simulated = board.clone(); // or a light way to "undo" after move
|
||||
//TODO : FIX THE CLONING!!!!!
|
||||
Board simulated = board;
|
||||
simulated.playMove(move);
|
||||
for (Move move : moves) {
|
||||
Board simulated = board.clone(); // Clone the board
|
||||
simulated.playMove(move);
|
||||
|
||||
int score = evaluate(simulated, board.isTurnWhite());
|
||||
int score = evaluate(simulated, board.isTurnWhite());
|
||||
|
||||
if (score > bestScore) {
|
||||
bestScore = score;
|
||||
bestMove = move;
|
||||
}
|
||||
}
|
||||
if (score > bestScore) {
|
||||
bestScore = score;
|
||||
bestMove = move;
|
||||
}
|
||||
}
|
||||
|
||||
return bestMove;
|
||||
return bestMove;
|
||||
}
|
||||
|
||||
|
||||
private int evaluate(Board board, boolean forWhite) {
|
||||
int score = 0;
|
||||
for (Piece piece : board.getAllPieces()) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package backend;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Board {
|
||||
public class Board implements Cloneable {
|
||||
|
||||
|
||||
|
||||
|
|
@ -292,10 +292,45 @@ private ArrayList<int[]> highlightedPositions = new ArrayList<>();
|
|||
}
|
||||
|
||||
public void playMove(Move move) {
|
||||
//TODO
|
||||
Piece pieceToMove = getPieceAt(move.getFromCol(), move.getFromRow());
|
||||
if (pieceToMove != null) {
|
||||
Piece pieceAtDestination = getPieceAt(move.getToCol(), move.getToRow());
|
||||
if (pieceAtDestination != null) {
|
||||
pieces.remove(pieceAtDestination);
|
||||
}
|
||||
pieces.remove(pieceToMove);
|
||||
|
||||
// Create a new instance of the specific piece type
|
||||
Piece newPiece;
|
||||
switch (pieceToMove.getType()) {
|
||||
case Pawn:
|
||||
newPiece = new Pawn(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
case King:
|
||||
newPiece = new King(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
case Queen:
|
||||
newPiece = new Queen(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
case Rook:
|
||||
newPiece = new Rook(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
case Bishop:
|
||||
newPiece = new Bishop(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
case Knight:
|
||||
newPiece = new Knight(pieceToMove.isWhite(), move.getToCol(), move.getToRow());
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown piece type");
|
||||
}
|
||||
pieces.add(newPiece);
|
||||
|
||||
turnNumber++;
|
||||
turnIsWhite = !turnIsWhite;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ArrayList<Move> getAllLegalMoves(boolean isWhite) {
|
||||
ArrayList<Move> moves = new ArrayList<>();
|
||||
|
|
@ -329,4 +364,29 @@ public ArrayList<Piece> getAllPieces() {
|
|||
public boolean isInBounds(int row, int col) {
|
||||
return row >= 0 && row < 8 && col >= 0 && col < 8;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Board clone() {
|
||||
try {
|
||||
Board clonedBoard = (Board) super.clone();
|
||||
|
||||
// Deep copy the pieces list
|
||||
clonedBoard.pieces = new ArrayList<>();
|
||||
for (Piece piece : this.pieces) {
|
||||
clonedBoard.pieces.add(piece.clone());
|
||||
}
|
||||
|
||||
// Copy other fields as necessary
|
||||
clonedBoard.selectedX = this.selectedX;
|
||||
clonedBoard.selectedY = this.selectedY;
|
||||
clonedBoard.turnNumber = this.turnNumber;
|
||||
clonedBoard.turnIsWhite = this.turnIsWhite;
|
||||
|
||||
return clonedBoard;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new AssertionError(); // Should never happen
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue