我需要一些帮助来完成我对C中Tic Tac Toe AI的Minimax算法的实现。
特别是,我需要帮助这两个执行树搜索的功能,并根据其得分提供最佳移动。 我尝试将移动分类为-1,如果O获胜(人类),1如果X获胜(ai)则为0,如果是抽奖则为0。 当我用1调用tryMove函数时,我的意思是X正在移动。当我用-1调用它时,我的意思是O正在采取行动。
出于某种原因,它将X放在下一个单元格中。似乎并不关心获胜或阻止移动,它只是在下一个单元格中移动。
非常感谢任何有关解释的帮助。
int tryMove(Board *b, char player){
int thisScore;
int score = -2;
if(won(b) && player == O) return 1;
else if(won(b)) return -1;
else if(drawn(b)) return 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(b->cells[i][j] == B){
b->cells[i][j] = player;
if(player == X){
thisScore = tryMove(b, O);
} else {
thisScore = tryMove(b, X);
}
if(thisScore > score) score = thisScore;
b->cells[i][j] = B;
}
}
}
return score;
}
void cpuMove(Board *b){
int row;
int col;
int score = -2;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(b->cells[i][j] == B){
b->cells[i][j] = X;
int tempScore = tryMove(b, O);
b->cells[i][j] = B;
if(tempScore > score){
score = tempScore;
row = i;
col = j;
}
}
}
}
b->cells[row][col] = X;
b->player = O;
b->moves++;
}