Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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中的minimax算法求解TicTacToe let[u_board=[[null,null,null],[null,null,null],[null,null,null]; 让_flag=true; 设_AIrowIndex=null; 设_AIcellIndex=null; const_wrapper=document.querySelector(“.wrapper”); 常量_changeTurn=函数(){ 如果(_flag==true){ _flag=false; 返回playerne.getSign(); }否则{ _flag=true; return playerTwo.getSign(); } }; const\u displayTurn=函数(){ let turn=document.querySelector(“.playerInfo\uu turn”) 如果(_flag==true){ turn.innerHTML=`${playerne.getName()}轮到你了`; }否则{ turn.innerHTML=`${playerTwo.getName()}轮到你了`; } }; 常数评估=(获胜者)=>{ 如果(获胜者=“X”){ 返回1; }否则如果(获胜者=“O”){ 返回-1; } 否则{ 返回null; } }; 常数评估函数=函数(板){ /*检查1诊断*/ 如果(单板[0][0]==单板[1][1]&单板[2][2]===单板[0][0]){ 返回评估(董事会[0][0]); /*检查2诊断*/ } 如果(单板[0][2]==单板[1][1]&单板[2][0]==单板[0][2]){ 返回评估(董事会[0][2]); /*支票对*/ } for(设col=0;col_Javascript_Algorithm_Tic Tac Toe_Minimax - Fatal编程技术网

用Javascript中的minimax算法求解TicTacToe let[u_board=[[null,null,null],[null,null,null],[null,null,null]; 让_flag=true; 设_AIrowIndex=null; 设_AIcellIndex=null; const_wrapper=document.querySelector(“.wrapper”); 常量_changeTurn=函数(){ 如果(_flag==true){ _flag=false; 返回playerne.getSign(); }否则{ _flag=true; return playerTwo.getSign(); } }; const\u displayTurn=函数(){ let turn=document.querySelector(“.playerInfo\uu turn”) 如果(_flag==true){ turn.innerHTML=`${playerne.getName()}轮到你了`; }否则{ turn.innerHTML=`${playerTwo.getName()}轮到你了`; } }; 常数评估=(获胜者)=>{ 如果(获胜者=“X”){ 返回1; }否则如果(获胜者=“O”){ 返回-1; } 否则{ 返回null; } }; 常数评估函数=函数(板){ /*检查1诊断*/ 如果(单板[0][0]==单板[1][1]&单板[2][2]===单板[0][0]){ 返回评估(董事会[0][0]); /*检查2诊断*/ } 如果(单板[0][2]==单板[1][1]&单板[2][0]==单板[0][2]){ 返回评估(董事会[0][2]); /*支票对*/ } for(设col=0;col

用Javascript中的minimax算法求解TicTacToe let[u_board=[[null,null,null],[null,null,null],[null,null,null]; 让_flag=true; 设_AIrowIndex=null; 设_AIcellIndex=null; const_wrapper=document.querySelector(“.wrapper”); 常量_changeTurn=函数(){ 如果(_flag==true){ _flag=false; 返回playerne.getSign(); }否则{ _flag=true; return playerTwo.getSign(); } }; const\u displayTurn=函数(){ let turn=document.querySelector(“.playerInfo\uu turn”) 如果(_flag==true){ turn.innerHTML=`${playerne.getName()}轮到你了`; }否则{ turn.innerHTML=`${playerTwo.getName()}轮到你了`; } }; 常数评估=(获胜者)=>{ 如果(获胜者=“X”){ 返回1; }否则如果(获胜者=“O”){ 返回-1; } 否则{ 返回null; } }; 常数评估函数=函数(板){ /*检查1诊断*/ 如果(单板[0][0]==单板[1][1]&单板[2][2]===单板[0][0]){ 返回评估(董事会[0][0]); /*检查2诊断*/ } 如果(单板[0][2]==单板[1][1]&单板[2][0]==单板[0][2]){ 返回评估(董事会[0][2]); /*支票对*/ } for(设col=0;col,javascript,algorithm,tic-tac-toe,minimax,Javascript,Algorithm,Tic Tac Toe,Minimax,我试图用minimax算法解决这个tic-tac-toe问题,但我不明白为什么它继续将“O”放在相邻的单元格中,我尝试了console.log()result,并在minimax函数中获得了最佳分数,看起来递归正在工作,但我不明白为什么在\u setAIPlay()中 如果我console.log(bestScore)在最后一个if语句中,它将我作为最终值或0或1返回,而不是-1,在这种情况下,我认为这应该是作为最小值的最佳分数 如果需要,您可以在这里找到完整的repo这里是一个用于JavaSc

我试图用minimax算法解决这个tic-tac-toe问题,但我不明白为什么它继续将“O”放在相邻的单元格中,我尝试了
console.log()
result,并在minimax函数中获得了最佳分数,看起来递归正在工作,但我不明白为什么在
\u setAIPlay()中

如果我
console.log(bestScore)
在最后一个
if
语句中,它将我作为最终值或
0
1
返回,而不是
-1
,在这种情况下,我认为这应该是作为最小值的最佳分数


如果需要,您可以在这里找到完整的repo

这里是一个用于JavaScript中Tic-Tac-Toe的minimax算法的简单实现。搜索树加深,直到检测到游戏结束状态。如果检测到获胜,则当前玩家无法比赛,因此静态值为负值(-10)。如果检测到绘图,则返回值为0

在所有其他情况下,搜索都在深化。这个实现使用了一个minimax算法,其中两个玩家的值都是最大的。因此,从更深层次的评估中得到的价值的标志总是被翻转(“对我的对手有利的东西对我不利,反之亦然”)

如果一个董事会被发现有一个获胜的位置,那么导致获胜的最短路径的动作将被优先考虑。这是通过每次回溯时将绝对值降低1点来实现的

如果有几个相同值的移动,那么将从这些移动中随机选取一个

以下是一些基本HTML的实现:

classtictactoe{
构造函数(){
this.board=Array(9).fill(0);//0表示“空”
this.moves=[];
this.isWin=this.isDraw=false;
}
get turn(){//re