井字游戏的minimax算法的实现

问题描述 投票:-1回答:1

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

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

我从使用随机数开始为游戏创建我的第一个AI,但现在的问题是使其无与伦比。我找到了一个称为minimax算法的东西,但是当我在JavaScript代码中使用它时,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> 

        

它应该选择所有最好的举动,并且永远不会失败。

javascript minimax
1个回答
1
投票

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

ESLint Demo

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.