Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套数组在一行中定义,然后在后面未定义(javascript)_Javascript_P5.js_Minimax - Fatal编程技术网

嵌套数组在一行中定义,然后在后面未定义(javascript)

嵌套数组在一行中定义,然后在后面未定义(javascript),javascript,p5.js,minimax,Javascript,P5.js,Minimax,所以我对minimax算法有点陌生。我知道它应该做什么以及它是如何工作的,但我正在一个tic-tac-toe游戏中努力实现该算法。我看了codingtrain编写算法的视频,还引用了他的原始代码。但是,当我在minimax函数中完成minimax函数的调用时,我无法恢复电路板。下面的代码是我的minimax函数 function minimax(board, depth, isMaximizing) { let result = checkWinner(); if (result !=

所以我对minimax算法有点陌生。我知道它应该做什么以及它是如何工作的,但我正在一个tic-tac-toe游戏中努力实现该算法。我看了codingtrain编写算法的视频,还引用了他的原始代码。但是,当我在minimax函数中完成minimax函数的调用时,我无法恢复电路板。下面的代码是我的minimax函数

function minimax(board, depth, isMaximizing) {
  let result = checkWinner();
  if (result != null) { // if the game is over return the scores and no more minimax needed
    return scores[result];
  }

  if (isMaximizing) {
    let bestScore = -Infinity;
    let move;
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 3; j++) {
        if (board[i][j] == "") { // is spot avaliable
          board[i][j] = ai; // ai takes spot
          let score = minimax(board, depth + 1, false); // call minimax on the current board
          board[i][j] = "";
          bestScore = max(score, bestScore); // looking for the highest score
        }
      }
    }
    return move;
  } else {
    let bestScore = Infinity;
    let move;
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 3; j++) {
        if (board[i][j] == "") { // is spot avaliable
          board[i][j] = human; // human takes spot
          let score = minimax(board, depth + 1, true); // call minimax on the current board
          board[i][j] = "";
          bestScore = min(score, bestScore); // looking for the lowest score
        }
      }
    }
    return move;
  }
}
函数极小极大值(板、深度、最大化){
让结果=checkWinner();
如果(result!=null){//如果游戏结束,返回分数,不需要更多的minimax
返回分数[结果];
}
if(最大化){
让bestScore=-无穷大;
让我们行动起来;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
如果(线路板[i][j]==”){//现场可用
board[i][j]=ai;//ai占据位置
let score=minimax(板,深度+1,false);//在当前板上调用minimax
董事会[i][j]=”;
bestScore=max(score,bestScore);//查找最高分
}
}
}
回击动作;
}否则{
让bestScore=无穷大;
让我们行动起来;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
如果(线路板[i][j]==”){//现场可用
board[i][j]=人;//人占了位置
let score=minimax(板,深度+1,真);//在当前板上调用minimax
董事会[i][j]=”;
bestScore=min(分数,bestScore);//查找最低分数
}
}
}
回击动作;
}
}
我在
board[I][j]=”行上得到错误“TypeError:board[I]未定义”,我很困惑,因为我可以事先将它设置为ai和human。作为参考,是codingtrain的代码,也是codingtrain的视频,他写了这个代码,解释了它的功能


如果我没有提供足够的信息,请不要生气,这是我关于堆栈溢出的第一个问题,我不确定还要添加什么。

您返回move,但从不将其设置为任何值。
move={I,j}缺失。我本应在minimax函数中返回分数,因此我将
返回移动
更改为
返回分数
。这也意味着不需要
move={i,j}
。虽然这确实解决了一个问题,但原始错误并没有消失(i=0;…
祝贺您!您刚刚生成了一个全局变量,该变量将在递归函数的每个实例中共享!我将其更改为
for(让i=0;…1
,非常感谢:)