parent
1aad4a6153
commit
c2903f1712
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,18 @@
|
||||
public class Board {
|
||||
public getAllLegalMoves(){
|
||||
|
||||
}
|
||||
public makeMove(){
|
||||
|
||||
}
|
||||
|
||||
public undoMove(){
|
||||
|
||||
}
|
||||
|
||||
public isGameover(){
|
||||
|
||||
}
|
||||
|
||||
public
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
public class ChessAI {
|
||||
private final int MAX_DEPTH = 4;
|
||||
|
||||
public Move findBestMove(Board board) {
|
||||
int bestScore = Integer.MIN_VALUE;
|
||||
Move bestMove = null;
|
||||
|
||||
for (Move move : board.getAllLegalMoves()) {
|
||||
board.makeMove(move);
|
||||
int score = minimax(board, MAX_DEPTH, Integer.MIN_VALUE, Integer.MAX_VALUE, false);
|
||||
board.undoMove();
|
||||
|
||||
if (score > bestScore) {
|
||||
bestScore = score;
|
||||
bestMove = move;
|
||||
}
|
||||
}
|
||||
|
||||
return bestMove;
|
||||
}
|
||||
|
||||
private int minimax(Board board, int depth, int alpha, int beta, boolean maximizingPlayer) {
|
||||
if (depth == 0 || board.isGameOver()) {
|
||||
return evaluateBoard(board);
|
||||
}
|
||||
|
||||
int score;
|
||||
if (maximizingPlayer) {
|
||||
score = Integer.MIN_VALUE;
|
||||
for (Move move : board.getAllLegalMoves()) {
|
||||
board.makeMove(move);
|
||||
score = Math.max(score, minimax(board, depth - 1, alpha, beta, false));
|
||||
board.undoMove();
|
||||
alpha = Math.max(alpha, score);
|
||||
if (beta <= alpha) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
score = Integer.MAX_VALUE;
|
||||
for (Move move : board.getAllLegalMoves()) {
|
||||
board.makeMove(move);
|
||||
score = Math.min(score, minimax(board, depth - 1, alpha, beta, true));
|
||||
board.undoMove();
|
||||
beta = Math.min(beta, score);
|
||||
if (beta <= alpha) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
private int evaluateBoard(Board board) {
|
||||
int score = 0;
|
||||
for (Piece piece : board.getPieces()) {
|
||||
if (piece.getColor() == Color.WHITE) {
|
||||
score += piece.getValue();
|
||||
} else {
|
||||
score -= piece.getValue();
|
||||
}
|
||||
}
|
||||
return score;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,2 @@
|
||||
public class Color {
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
public class Move {
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
public class Piece {
|
||||
}
|
Reference in new issue