【发布时间】:2023-01-15 20:10:43
【问题描述】:
这是一个简单的扫雷游戏,带有 Windows 用户界面
这个函数唯一要做的就是擦除按钮上的所有信息(例如文本),以及创建一个新的随机数组。在我按下按钮后第一次它工作得很好,但第二次它不工作。第二次它擦除所有内容(它按计划再次完成它的工作),但其他功能不起作用(我在第二次重启后按下按钮,没有任何反应,但在第一次重启后一切都很好)。
这是怎么回事??是存储变量的内存问题,还是图形用户界面的特定问题,我不知道?
from tkinter import *
def new_game():
lost = False
label['text'] = str(mines) + ' mines left'
global mine_sweep
mine_sweep = mine_randomization().tolist()
for row in range(10):
for col in range(10):
buttons[row][col]['text'] = ''
window = Tk()
window.title('minesweeper')
label = Label(text=str(mines)+' mines left', font=('consolas', 20))
label.pack(side='top')
reset_button = Button(text='restart', command=new_game)
reset_button.pack(side='top')
buttons = buttons.tolist()
frame = Frame(window)
frame.pack()
for row in range(10):
for col in range(10):
buttons[row][col] = Button(frame, text='', font=('consolas', 10),
width=2, height=1,
command= lambda row=row, col=col: cell(row, col))
buttons[row][col].grid(row=row, column=col)
window.mainloop()
(我不能把整个程序放在这里,只是不起作用的部分)
这是功能单元的作用:
def cell(row, col):
global lost
if buttons[row][col]['text'] == '' and mine_sweep[row][col] == 0 and not lost:
open_fields(row, col)
elif buttons[row][col]['text'] == '' and mine_sweep[row][col] == 1 and not lost:
buttons[row][col].config(bg='red', font=('consolas', 10))
buttons[row][col]['text'] = '*'
label['text'] = 'You lost!'
lost = True
if check_win():
label['text'] = 'You win!'
【问题讨论】:
-
我不知道,对我来说这很完美。 :(
-
@TimRoberts 我很确定(刚刚测试完全确定)这两种方法都做同样的事情(以及
config) -
cell是做什么的?如果没有完整的minimal reproducible example,不太可能重现问题,给定的代码没有问题(除了没有定义一些名称之外) -
哦,难道你真的没有重置
lost?在new_game你只声明了一个局部变量lost,让它成为global,这似乎是你问题的根本原因(特别是因为在cell你检查这个条件),否则,代码似乎它应该运作良好