我需要使我的井字游戏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>
它应该选择所有最好的举动,并且永远不会失败。
我没有minimax的解决方案,但我建议将其放入eslint演示中,以帮助找出可能的错误。
这将有助于发现明显错误的情况。我快速浏览了以下内容:
startGame
中必须大写,以与变量在顶部匹配empty
函数中的empty
变量需要重命名。===
进行比较,而不是==
MDN comparison docselse if(turn = human)
中的[switchTurn
]最有可能不是单个=
。 if
检查中不应进行分配。我打赌您的意思是进行比较。gameOver
。除非有未粘贴到问题中的代码,否则这可能导致它永远运行。希望有帮助!我猜还有更多的事情需要更新,但是eslint可以帮助您找到更多的东西。