使用Tkinter创建游戏板

2024-09-27 21:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python(2.7)
构建一个简单的Connect Four游戏

我创建了一个板,它由一个简单的多维Python列表组成。
我的董事会名单如下:

board = [
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,O,_,_,_,_,_],
    [_,_,_,_,X,_,_,_,_,_],
    [_,_,_,_,X,O,_,_,_,_],
    [_,_,_,_,X,O,_,_,_,_],
]

WARE X是播放器1和O是播放器2(或计算机)

现在,我已经为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()

问题:如何创建董事会的视觉表示,以便每个列表都有一个矩形?另外,是否有一种方法可以在单击矩形时检测并替换相应的列表值


Tags: boardgame游戏列表tkinter计算机connectgui
2条回答

我创建了一个标签板,并根据单击的标签为其上色:

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()

这不会进行任何验证(例如,确保单击的元素位于底部)。使用类而不是全局数据也会好得多,但这是有兴趣的程序员的练习:)

您可能想要创建一个Buttons的网格。您可以根据board中的值设置它们的样式,并在单击时分配一个更新board的回调

相关问题 更多 >

    热门问题