这段代码要怎么修改才能实现ai方法的调用 public void AI 实现人机对战的算法 if chessArrx1y1==1 AI-1; backtracking-1; else if chessArrx1y1==-1 AI1; backtracking1;
修改方法的调用方式,将原来的无参方法修改为有参方法,传入棋盘和颜色参数。同时在AI()方法中调用修改后的AI()方法,并将返回的最优解坐标赋值给x1和y1,以实现AI下棋的功能。
修改后的代码如下:
public void AI() { //实现人机对战的算法 if (chessArr[x1][y1]==1){ int[] bestMove = AI(chessArr, -1); backtracking(-1); x1 = bestMove[0]; y1 = bestMove[1]; }else if (chessArr[x1][y1]==-1){ int[] bestMove = AI(chessArr, 1); backtracking(1); x1 = bestMove[0]; y1 = 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/hoWC 著作权归作者所有。请勿转载和采集!