Tic Tac Toe AI - C中的Minimax

时间:2016-11-06 15:44:07

标签: c minimax

我需要一些帮助来完成我对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++;
}

0 个答案:

没有答案