所以我在 Tkinter 中编写了一个 gui 程序,其中包括玩井字游戏,可以选择与计算机用户对抗。出于某种原因,我检查剩余点数的方式,检查计算机是否可以选择一个空间,(ai_counter) 一直计数不正确。当打印出 taken 时,然后在打印出 ai_counter 后立即,在第 3 个用户选择空间后,计数器飙升至 9 并终止 cpus 回合。 这个的输出通常是这样的: [2,1,2,0,1,0,1,0,0] 柜台:9
为什么计数器功能不正确?
Taken 是一个具有 9 个值的全局列表,0、1 或 2 表示打开、玩家 1 位置或玩家 2 位置 - 即: 0|1|2 3|4|5 6|7|8
下面是计数器和循环的相关片段
ai_turn = True
ai_counter = 0
for x in taken:
if taken[x] != 0:
ai_counter = ai_counter + 1
if ai_counter >= 8:
ai_turn = False
下面是每次用户玩空格时都会调用的整个计算机转弯函数
def computer_turn():
global ttt_mode
global taken
if ttt_mode == 1:
#easy mode
time.sleep(0.5)
computers_turn = True
counter = 0
for x in taken:
if taken[x] !=0:
counter+=1
if counter >=8:
computers_turn = False
turn_label.config(text="Cat Game!")
global solo_game_over
if solo_game_over == True:
computers_turn = False
while(computers_turn):
target = random.randint(0,8)
while (taken[target] != 0):
target = random.randint(0,8)
taken[target] = 2
buttons[target].config(image=O_photo_sub, command=lambda: None)
check_winner()
computers_turn = False
elif ttt_mode == 2:
#hard mode
ai_turn = True
ai_counter = 0
for x in taken:
if taken[x] != 0:
ai_counter = ai_counter + 1
if ai_counter >= 8:
ai_turn = False
time.sleep(0.3)
if solo_game_over == True:
ai_turn = False
while ai_turn:
ai_best_move = get_best_move(taken)
taken[ai_best_move] = 2
buttons[ai_best_move].config(image=O_photo_sub, command=lambda: None)
check_winner()
ai_turn = False
我尝试了很多打印语句,改变了计数器循环以在每次按下按钮时发生,但是同样的事情发生在计数器从 0 到 6 再到 9 并结束游戏的地方。