用Tkinter制作游戏棋盘



我正试图建立一个简单的游戏连接四个Python(2.7)

我创建了一个板,它由一个简单的多维Python列表组成。
我的Board列表是这样的:

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

如果X Player1, O Player2 (or Computer),

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

问题:我如何创建一个直观的表示板,使每个元素,有一个矩形?此外,是否有一种方法来检测,当一个矩形被单击并替换相应的列表值?

我创建了一个标签板,并根据点击的颜色给它们上色:

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

不做任何验证(例如,确保被点击的元素位于底部)。使用类而不是全局数据也会更好,但对于感兴趣的编码人员来说,这是一个练习:)。

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

这是一个简单的示例脚本,您可以使用Python 3+创建一个简单的四人游戏,基于game2dboard库中的一个示例井字游戏。这个库非常酷,游戏可以很容易地改进,让图像代表你引用的X和O。

from game2dboard import Board
def mouse_fn(btn, row, col):    # mouse callback function
    b[row][col] = "X" if not b[row][col] else "O"
b = Board(10, 10)         # 3 rows, 4 columns, filled w/ None
b.title = "Connect Four"
b.cell_size = 120
b.cell_color = "bisque"
b.on_mouse_click = mouse_fn
b.show()

当然,你需要pip安装game2dboard或克隆repo。享受吧!

相关内容

  • 没有找到相关文章

最新更新