我正在用java实现minimax算法。我学过编码火车教程。问题是,人工智能总是选择下一个可用的地点,而不是最好的。
game.put()将玩家(或空白点)id放置在给定的点上。
board是游戏类的一个变量,它是字节的二维数组。
game.checkforwin()如果游戏仍然打开,则返回0,如果没有人赢并且没有可能的移动(平局),则返回1,如果ai赢了,则返回1,如果玩家赢了,则返回2。
public Point bestMove(){
int bestScore = Integer.MIN_VALUE;
Point move = null;
for (int i=0; i<board.length; i++){
for(int j=0; j<board[i].length; j++){
if (board[i][j] == blank){
game.put(ai_id, new Point(i,j));
int score = minimax(false);
game.put(blank, new Point(i,j));
if(score > bestScore){
bestScore = score;
move = new Point(i, j);
}
}
}
}
return move;
}
public int minimax(boolean ai_turn){
int state = game.checkForWin();
if (state!=0){ // If game ended
if(state == -1){
return 0; //TIE
}
if( state == ai_id){
return 1; //AI wins
}
return -1; //Player wins
}
int bestScore = 0;
if(ai_turn){
bestScore = Integer.MIN_VALUE;
for (int i=0; i<board.length; i++){
for(int j=0; j<board[i].length; j++){
if (board[i][j] == blank){
game.put(ai_id, new Point(i,j));
int score = minimax(false);
game.put(blank, new Point(i,j));
bestScore = Math.max(score, bestScore);
}
}
}
}else{
bestScore = Integer.MAX_VALUE;
for (int i=0; i<board.length; i++){
for(int j=0; j<board[i].length; j++){
if (board[i][j] == blank){
game.put(player_id, new Point(i,j));
int score = minimax(true);
game.put(blank, new Point(i,j));
bestScore = Math.min(score, bestScore);
}
}
}
}
return bestScore;
}
编辑:我重写了整个游戏的代码和这个函数算法的工作预期。
1条答案
按热度按时间bqujaahr1#
不检查值
2
如果玩家赢了。你先检查一下-1
怎么了?