python - 如何设置转弯(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()
解决方案
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()
推荐阅读
- gcc - 为自定义 RISC-V imafd SOC 移植 linux
- javascript - 反应如何只运行一次功能,在页面进入或刷新后
- javascript - React-Native FlatList 产生一个 SyntaxError
- javascript - 通过拆分字符串创建对象数组
- ios - 代号一-如何创建webview与native(iOS)通信
- javascript - 使用 javascript 设置的文本框的值未显示在文本框上
- r - tidyverse 和 dplyr:根据其他列有条件地替换列中的值
- python - TypeError:不支持的操作数类型 -:'str' 和 'int' 警告:进程以 a(n) Unknown (1) 错误代码退出
- linux - 给定 YYYY-MM-DD,如何找到一周的开始日期和一周的结束日期?
- c++ - 如何防止 MSVC 编译器将 const 替换为立即值