我正在尝试使用 Connect Four 建立一个简单的 Python(2.7) 游戏
我创建了一个由简单的多维Python列表组成的板 我的董事会名单如下:
board = [
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,O,_,_,_,_,_],
[_,_,_,_,X,_,_,_,_,_],
[_,_,_,_,X,O,_,_,_,_],
[_,_,_,_,X,O,_,_,_,_],
X是 Player1 而O是 Player2 (或计算机)。
现在,我已经为 GUI 创建了一些基本代码,如下所示:
# Connect 4 Game
import Tkinter
screen = Tkinter.Tk()
screen.title("My First Game")
#Create a board
board = Tkinter.Canvas(screen,width=500,height=500)
board.pack()
screen.mainloop()
问题:如何创建电路板的可视化表示,以便每个列表都有一个矩形?另外,有没有办法检测,当点击一个矩形并替换相应的列表值?
我希望这个问题不太清楚。 谢谢!
答案 0 :(得分:7)
我创建了一个标签板并根据其点击颜色:
import Tkinter as tk
board = [ [None]*10 for _ in range(10) ]
counter = 0
root = tk.Tk()
def on_click(i,j,event):
global counter
color = "red" if counter%2 else "black"
event.widget.config(bg=color)
board[i][j] = color
counter += 1
for i,row in enumerate(board):
for j,column in enumerate(row):
L = tk.Label(root,text=' ',bg='grey')
L.grid(row=i,column=j)
L.bind('<Button-1>',lambda e,i=i,j=j: on_click(i,j,e))
root.mainloop()
这不会进行任何验证(例如,确保单击的元素位于底部)。使用类而不是全局数据也会好得多,但对于感兴趣的编码器来说这是一个练习:)。
答案 1 :(得分:3)
您可能想要创建Buttons的网格。您可以根据board
中的值设置样式,并指定一个在点击时更新board
的回调。