我如何弄清楚为什么我的mini-max井字游戏AI无法正常工作?

时间:2020-02-17 01:51:55

标签: python artificial-intelligence minimax

我正在尝试制作一个minimax井字游戏,因为我是Python的新手,并且试图弄清楚一个简单的AI-mini-max游戏是如何工作的。出于某种原因,AI仍然会按顺序排列,以便在板子列表上出现该点。

例如:如果右上角的位置在“ b”列表中排在第一位,则它首先将其选中。看起来它正在计算分数,但我不认为出于某些原因它正在利用分数。我希望它不会按董事会中的空格顺序排列。我想不出一种方法来替换放置“ O”的代码。

public class SettingsDialogFragment extends AppCompatDialogFragment {
   // Implementation
}

1 个答案:

答案 0 :(得分:0)

  • 作为一般样式规则,请尝试将行长保持在100个字符以内。
  • 您不应使用str作为变量名称,因为它是内置变量。
  • 您可以在迭代过程中使用enumerate从列表中获取索引和值。
  • scores应该在minimax中定义,因为这是唯一使用它的地方。
  • 由于这部​​分代码,AI占据了第一个位置:

    bestScore = -math.inf
    turnai = False
    i = 0
    for str in b:
        if str == " ":
            b[i] = AI
            score = minimax(b, 0, True)
            b[i] = " "
            print(score)
            if score > bestScore and turnai == False: # Allways true first loop
                bestScore = score
                b[i] = AI 
                turnai = True                         # ^ Never true in later loops
    

    具有讽刺意味的是,只有在turnai == false

  • 时才会发生
  • 您实际上不需要在游戏循环中使用turnai布尔值,因为您已明确编写了AI和用户回合的代码。
  • 您不需要检查boolean == True只是说while game:
  • 如果您的控制布尔值设置为false,则无需break
  • 如果用户输入了无效的输入,则他们将失去该机会。
  • 您有sw = checkwinner(),然后检查cw的值

我可以为您解决这个问题,但是我想我已经给您足够的地方可以在这​​里使用,我会告诉您您的概念不错,因此,如果您再坚持一点,您应该会感到满意结果...

此处的主要逻辑缺陷是,您实际上从不计算给定选择留下的获胜次数...您的minimax函数每次仅返回1。