首页 > 解决方案 > 如何设置转弯(Python - Tkinter)?

问题描述

我不知道如何正确设置转弯。计算机似乎跳过了它。我为人类玩家设置了第一步和一个开关转向功能,但计算机没有移动。我需要解决这个问题,以便将您的教义应用到我的 tkinter 井字游戏中。

from tkinter import *
import random
root = Tk()
turn = "HUMAN"

def switch_turn():
    global turn
    if turn == "COMPUTER":
        turn = "HUMAN"
    else:
        turn = "COMPUTER"

def computer_movement():
    movement = random.randint(1, 3)
    change_color(movement)

def change_color(n):
    if n == 1:
        button_1.config(bg="yellow")
    elif n == 2:
        button_2.config(bg="yellow")
    elif n == 3:
        button_3.config(bg="yellow")
    switch_turn()

button_1 = Button(root, height=4, width=8, command=lambda:change_color(1))
button_1.grid(row=0, column=0)
button_2 = Button(root, height=4, width=8, command=lambda:change_color(2))
button_2.grid(row=0, column=1)
button_3 = Button(root, height=4, width=8, command=lambda:change_color(3))
button_3.grid(row=0, column=2)

counter = 1
while True:
    if counter == 3:
        break
    if turn == "COMPUTER":
        computer_movement()
    counter += 1

root.mainloop()

标签: pythontkinter

解决方案


while您的代码在调用前的声明中不起作用的一个主要原因root.mainloop()

当您运行程序时,会发生这种情况:

  • 代码到达while循环
  • while 循环执行 3 个周期,计数器达到数字 3
  • 代码退出 while 循环并生成 tkinter 窗口。

所以解决方案是删除while循环并computer_movement()在轮到分配给计算机之后调用。

请记住,while 循环和 tkinter mainloop() 不是最好的朋友,您更喜欢使用回调处理所有函数 llas(或者尝试实现threading


from tkinter import *
import random
root = Tk()

turn = "HUMAN"

def switch_turn():
    global turn
    if turn == "COMPUTER":
        turn = "HUMAN"
    else:
        turn = "COMPUTER"
        computer_movement()


def computer_movement():
    movement = random.randint(1, 3)
    print('COMPUTER MOVEMENT:', movement)
    change_color(movement)

def change_color(n):
    if n == 1:
        button_1.config(bg="yellow")
    elif n == 2:
        button_2.config(bg="red")
    elif n == 3:
        button_3.config(bg="black")

    if turn ==  "HUMAN":
        print("HUMAN MOVE: ", n)
    switch_turn()

button_1 = Button(root, height=4, width=8, command=lambda: change_color(1))
button_1.grid(row=0, column=0)

button_2 = Button(root, height=4, width=8, command=lambda: change_color(2))
button_2.grid(row=0, column=1)

button_3 = Button(root, height=4, width=8, command=lambda: change_color(3))
button_3.grid(row=0, column=2)


root.mainloop()


推荐阅读