好的,所以我还有一个关于我正在建设的井字游戏的问题。 :P我正在研究的是编码A.I.这是无与伦比的,所以我现在所知道的是,如果计算机首先启动,它将按照必要的步骤来获胜或抽奖,但是,我不知道如何使用算法,主要是minimax() ,(因为这是我制作的第一个实际程序)并且我不太完全确定如何简化所有if语句。
我对A.I.的代码到目前为止如下:
if strategy == False:
slot[0] = computer_team
if slot[1] == user_team or slot [2] == user_team and (slot[3] != user_team) \
and (slot[3] != computer_team):
slot[3] = computer_team
if slot[6] == user_team and (slot[4] != user_team) and (slot[4] != computer_team):
slot[4] = computer_team
else:
return
if slot[3] == user_team or slot[4] == user_team or slot[6] == user_team \
and (slot[1] != user_team) and (slot[1] != computer_team):
slot[1] = computer_team
if slot[2] == user_team and (slot[4] != user_team) and (slot[4] != computer_team):
slot[4] = computer_team
elif slot[2] == user_team and slot[4] == user_team and (slot[6] != user_team) \
and (slot[6] != computer_team):
slot[6] = computer_team
if slot[4] == user_team and (slot[5] != user_team) and (slot[5] != computer_team):
slot[5] = computer_team
elif slot[7] == user_team and slot[5] == computer_team and (slot[8] != user_team) and (slot[8] != computer_team):
slot[8] = computer_team
else:
return
else:
return
我发现的一个问题是,一旦if语句嵌套到目前为止它们就会停止执行(在这种情况下,最后一个elif插槽[7])。我知道这段代码效率低下,但这是我知道怎么做的唯一方法。 (我不确定我将如何用于语句或范围)。因此,如果您有任何关于算法的建议或如何简化这个问题,那么我很高兴听到。 C:
编辑:所有的插槽都是指我的电路板,它是:
def draw_board():
'''Opted to use lists so that the numbers can be replaced with either
X or O later on and so that testing whether the game is over is simpler'''
print (" " + str(slot[0]) + " | " + str(slot[1]) + " | " + str(slot[2]))
print ("-----------")
print (" " + str(slot[3]) + " | " + str(slot[4]) + " | " + str(slot[5]))
print ("-----------")
print (" " + str(slot[6]) + " | " + str(slot[7]) + " | " + str(slot[8]))
print ("\n")
并且user_team / computer_team拥有" X"或者" O",取决于玩家选择使用哪一个。
答案 0 :(得分:0)
您可能需要查看
http://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html
它会逐步为您打造井字游戏的解决方案。请注意,它首先介绍一个类似于您在此处所做的基于表的实现,然后开始使用基于树的解决方案。
答案 1 :(得分:0)
我发现了其他一些“错误”,但要回答你的问题......
看起来你的问题就在这里:
elif slot[2] == user_team and slot[4] == user_team and (slot[6] != user_team) \
and (slot[6] != computer_team):
当你按照你提供的模式4, 2, 3, 7
时,董事会看起来像是:
O | O | X
-----------
X | X | O
-----------
O | X | 8
以上条件不满足。例如,你写的内容是:
if Slot2 = User, Slot4 = User, Slot6 != User, and Slot6 != Computer either...
董事会上写着:
Slot2 = User, Slot4 = User, Slot6 != User, and Slot6 = Computer
我刚从第192行删除了and (slot[6] != computer_team)
,现在看起来效果很好。
让我知道这是否解决了你的第一个问题(可能有很多问题)(整个问题还有其他几点,但是如果你按照它进行工作,你会发现它们都很及时)。
这很扎实 - 干得好。