井字游戏的minimax算法的实现

时间:2019-10-25 19:27:44

标签: javascript minimax

我需要使我的井字游戏AI无与伦比。

计算机AI'O'应该选择最佳动作。

我从使用随机数开始为游戏创建我的第一个AI,但现在的问题是使其无与伦比。我找到了一个叫做minimax算法的东西,但是当我在JavaScript代码中使用minimax算法时,minimax算法可以工作,但是放置O会花费一些时间,并且它没有选择最佳移动,所以我必须添加或更改才能制成计算机自动选择最佳动作。如果有人可以帮助我找到答案,那真的会帮助我,谢谢。

这是我的JavaScript代码:

  



 
  
 td { 
 
 height: 100px; 

 width: 100px; 
 
   font-size: 20px; 
 
  text-align: center; 
   } 
 

    
  
  <body onload="startGame();"> 
 
 

 
 <div id="message">sss</div> 
 

 
 <table class="squares"  border = "1"> 
 
 <tr> 
 
  <td class="square" id="s1" onClick="nextMove(this)"></td> 
 
  <td class="square" id="s2" onClick="nextMove(this)"></td> 
 
  <td class="square" id="s3" onClick="nextMove(this)"></td> 
  </tr> 
  <tr> 
 
   <td class="square" id="s4" onClick="nextMove(this)"></td> 
 
   <td class="square" id="s5" onClick="nextMove(this)"></td> 
 
    <td class="square" id="s6" onClick="nextMove(this)"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class="square" id="s7" onClick="nextMove(this)"></td> 
 
     <td class="square" id="s8" onClick="nextMove(this)"></td> 
 
      <td class="square" id="s9" onClick="nextMove(this)"></td> 

       </tr> 
       </div>
       </table> 

        

它应该选择所有最佳动作,并且永远不会失败。

1 个答案:

答案 0 :(得分:1)

我没有minimax的解决方案,但我建议将其放入eslint演示中,以帮助找出可能的错误。

ESLint Demo

这将有助于发现明显错误的情况。我快速浏览了以下内容:

  1. origboard需要在startGame中大写,以将您的变量排在首位
  2. empty函数中的empty变量需要重命名。
  3. 通常,您应使用===进行比较,而不要使用== MDN comparison docs
  4. else if(turn = human)中的
  5. switchTurn应该很可能不是单个=if检查中不应进行分配。我打赌您的意思是进行比较。
  6. 我看不到使用gameOver。除非有未粘贴到问题中的代码,否则这可能导致它永远运行。

希望有帮助!我猜还有很多事情需要更新,但是eslint可以帮助您找到更多的东西。