Создание игрового поля с Python и Tkinter

Я пытаюсь построить простую игру Подключить Четыре С Python (2.7)

Я создал доску, которая состоит из простого многомерного списка Python.
Мой список советов выглядит так:

board = [

[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,O,_,_,_,_,_],
[_,_,_,_,X,_,_,_,_,_],
[_,_,_,_,X,O,_,_,_,_],
[_,_,_,_,X,O,_,_,_,_],

]

Were X is Player1 и 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()

вопрос: как я могу создать визуальное представление доски, чтобы для каждого списка был прямоугольник? Кроме того, есть ли способ определить, когда щелкнут прямоугольник и заменить соответствующее значение списка?

Я надеюсь, что вопрос не слишком неясен. Спасибо!

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

это не делает никакой проверки (например, чтобы убедиться, что щелкнутый элемент находится внизу). Это также было бы намного лучше с классами вместо глобальных данных, но это упражнение для заинтересованного кодера :).


вы, вероятно, хотите создать сетку кнопки. Вы можете стилизовать их в соответствии со значениями в board, и назначить обратный вызов, который обновляет board при нажатии.