我还在继续开发Connect 4游戏,并且在AI部分遇到了问题。我使用了与胜利检查相同的函数,但却出现了无限循环,或者代码根本不工作的情况。
这是我的函数
def AIhor(array):global blockwinfor x in range(0, 6): x = array[x] for y in range(1, 5): if x[y] in ("@", "#"): if ((x[y] == x[y + 1]) and x[y] == x[y + 2]) and (x[y + 3] == "O"): return True blockwin = y + 3 break elif ((x[y] == x[y + 1]) and (x[y] == x[y + 3]) and (x[y + 2] == "O")): return True blockwin = y + 2 break elif ((x[y] == x[y + 2]) and (x[y] == x[y + 3]) and (x[y + 2] == "O")): return True blockwin = y + 1 break elif ((x[y + 1] == x[y + 2]) and (x[y + 1] == x[y + 3]) and (x[y] == "O")): return True blockwin = y break else: if (x == 5 and y == 4): return False break
这是函数调用:
g = ['A', 'O', 'O', 'O', 'O', 'O', 'O', 'O']h = ['B', 'O', 'O', 'O', 'O', 'O', 'O', 'O']i = ['C', 'O', 'O', 'O', 'O', 'O', 'O', 'O']j = ['D', 'O', 'O', 'O', 'O', 'O', 'O', 'O']k = ['E', 'O', 'O', 'O', 'O', 'O', 'O', 'O']l = ['F', 'O', 'O', 'O', 'O', 'O', 'O', 'O']m = [' ', '1', '2', '3', '4', '5', '6', '7']a = gb = hc = id = je = kf = ln = mafortests = [a, b, c, d, e, f]if AIhor(afortests): player2choice = blockwinelse: player2choice = random.randint(1, 7)
回答:
“代码不工作”并不是一个有用的错误报告。请说明发生了什么不该发生的事情,或者应该发生而没有发生的事情?
但我可以马上告诉你,你有很多代码行永远不会被执行。在每个if
语句中,你有一个return
后面跟着其他代码。但这些其他代码永远不会被执行,因为return
会立即返回。同一个代码块中return
之后的代码永远不会被执行,blockwin
也不会被修改。