2013-01-16 22 views
6

Tôi cố gắng để xây dựng một trò chơi đơn giản của Connect Four với Python(2.7)
Tạo một bảng trò chơi với Python và Tkinter

Tôi đã tạo ra một bảng, bao gồm một danh sách Python đa chiều đơn giản.
danh sách Hội đồng quản trị của tôi trông như thế này:

board = [ 

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

]

Were X là Player1 và O là Player2 (hoặc máy tính).

Bây giờ, tôi đã tạo ra một số mã cơ bản cho GUI, như thế này:

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

Câu hỏi: Làm thế nào tôi có thể tạo ra một hình ảnh đại diện của hội đồng quản trị, để cho mọi danh sách, có là một hình chữ nhật? Ngoài ra, có cách nào để phát hiện, khi một hình chữ nhật được nhấp và thay thế giá trị danh sách tương ứng?

Tôi hy vọng câu hỏi không quá rõ ràng. Cảm ơn!

+3

Có lý do nào khiến mỗi thành phần trong bảng của bạn là danh sách không? Ý tôi là, '['_']', '['X']', hoặc '['O']'. Không phải chúng chỉ là các phần tử, như ''_'','' X'', hay ''O''? – ford

+0

Tôi đoán là không. Tôi chỉ học Python và đó là ý tưởng đầu tiên của tôi, làm thế nào để làm điều đó. Tôi chắc chắn có cách tốt hơn, nhưng tôi chỉ không biết họ. – intelis

+0

@fizzisist: cảm ơn, tôi chỉ chỉnh sửa mã số – intelis

Trả lời

6

Tôi tạo ra một bảng nhãn và màu họ theo đó được nhấp:

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

này không làm bất cứ xác nhận (để đảm bảo rằng các yếu tố nhấp là ở phía dưới chẳng hạn). Nó cũng sẽ tốt hơn nhiều với các lớp thay vì dữ liệu toàn cầu, nhưng đó là một bài tập cho coder quan tâm :).

3

Bạn có thể muốn tạo một lưới gồm Buttons. Bạn có thể tạo kiểu cho chúng theo các giá trị trong board và chỉ định một cuộc gọi lại cập nhật board khi được nhấp.

+0

Đó chính xác là những gì tôi đã làm với phiên bản * Battleship * của tôi. Các nút hoạt động tốt cho mục đích này –