我现在正在用tkinter做一个双人的tic-tac-toe游戏,但是到目前为止,我不知道如何检查棋盘是否有获胜的情况,或者什么时候告诉胜利者他们赢了。
from tkinter import *
root = Tk()
twod = [[0 for x in range(3)] for y in range(3)] # 0 will be blank 1 will be circle 2 will be x
rows = 0
columns = 0
types = "X"
for x in twod:
for y in x:
butt = Button(text=' ', width=20, height=10)
twod[columns][rows]= butt
butt.config(text=' ', width=20, height=10, command=lambda butt=butt : click(butt))
butt.grid(row=rows, column=columns)
columns += 1
rows += 1
columns = 0
root.mainloop()
我已经删除了其中的一些函数,因为这些不是问题,主要的问题是控制流。
我的第一步是尝试和检查,但我不知道我应该把它放在我的代码中的位置。
所以,总结我的问题,在Tkinter中有一个mainloop
函数,它应该遍历整个代码。但是,我在其中输入的所有内容,即print
语句,都只执行一次。
发布于 2020-08-20 00:35:06
正如@martineau建议的那样,你可以在点击按钮后检查面板。您可以使用二进制模式来检查胜利者。
试试这段代码。它用随机值填充棋盘,然后在你点击一个按钮时检查是否获胜。
from tkinter import *
import random
root = Tk()
twod = [[0 for x in range(3)] for y in range(3)] # 0 will be blank 1 will be circle 2 will be x
rows = 0
columns = 0
types = "X"
btnlst = []
def CheckWin():
wins = [0b111000000,0b000111000,0b000000111,0b100010001,0b001010100,0b100100100,0b010010010,0b001001001] # all possible win patterns
for p in ['X','O']: # check each player
m = int("".join(['1' if b['text'] == p else '0' for b in btnlst]),2) # merge button values into single binary value
for w in wins: # check each pattern
if w & m == w: # if pattern matches (binary and)
print(p, 'wins')
return
print('No Winner')
def click(evt):
CheckWin()
for x in twod:
for y in x:
butt = Button(text=' ', width=20, height=10)
twod[columns][rows]= butt
butt.config(text=random.choice(['X','O']), width=20, height=10, command=lambda butt=butt : click(butt))
butt.grid(row=rows, column=columns)
btnlst.append( butt)
columns += 1
rows += 1
columns = 0
root.mainloop()
https://stackoverflow.com/questions/63496185
复制相似问题