这段代码要怎么修改才能实现ai方法和backtracking方法的调用 public void AI 实现人机对战的算法 if chessArrx1y1==1 AI-1; backtracking-1; else if chessArrx1y1==-1 AI1; b
修改代码如下:
public void AI() { //实现人机对战的算法 if (chessArr[x1][y1]==1){ int[] bestMove = AI(chessArr,-1); chessArr[bestMove[0]][bestMove[1]] = -1; win.checkwin(bestMove[0],bestMove[1]); }else if (chessArr[x1][y1]==-1){ int[] bestMove = AI(chessArr,1); chessArr[bestMove[0]][bestMove[1]] = 1; win.checkwin(bestMove[0],bestMove[1]); } }
public int[] AI(int[][] chessArr,int color) {
int[] bestMove = new int[2]; // 最优解坐标
int bestScore = Integer.MIN_VALUE; // 最优解分数
for (int i = 0; i < line; i++) {
for (int j = 0; j < line; j++) {
if (chessArr[i][j] == 0) { // 如果该位置为空
chessArr[i][j] = color; // 尝试在该位置下棋
int score = backtracking(chessArr, -color); // 递归求解分数
if (score > bestScore) { // 如果当前分数比最优解分数更高
bestScore = score; // 更新最优解分数
bestMove[0] = i; // 更新最优解坐标
bestMove[1] = j;
}
chessArr[i][j] = 0; // 恢复为空位
}
}
}
return bestMove; // 返回最优解坐标
}
public int backtracking(int[][] chessArr, int color) {
int result = win.checkwin(x1,y1); // 判断当前棋局是否已分胜负
if (result != 0) { // 如果已分胜负
return color * result; // 返回胜负结果
}
int bestScore = Integer.MIN_VALUE; // 最优解分数
for (int i = 0; i < line; i++) {
for (int j = 0; j < line; j++) {
if (chessArr[i][j] == 0) { // 如果该位置为空
chessArr[i][j] = color; // 尝试在该位置下棋
int score = backtracking(chessArr, -color); // 递归求解分数
if (score > bestScore) { // 如果当前分数比最优解分数更高
bestScore = score; // 更新最优解分数
}
chessArr[i][j] = 0; // 恢复为空位
}
}
}
return -bestScore; // 返回最优解分数的相反数
原文地址: https://www.cveoy.top/t/topic/hoWF 著作权归作者所有。请勿转载和采集!