没有明显原因增加计数器尖峰?

问题描述 投票:0回答:0

所以我在 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 并结束游戏的地方。

python arrays loops tkinter global
© www.soinside.com 2019 - 2024. All rights reserved.