2013-01-16 8 views
6

Sto cercando di costruire un semplice gioco di Connect Four con Python(2.7)
Creazione di un gioco da tavolo con Python e Tkinter

ho creato una tavola, che consiste in un semplice elenco Python multidimensionale.
lista mio consiglio è simile al seguente:

board = [ 

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

]

Were X è Player1 e O è Player2 (o Computer).

Ora, ho creato un po 'di codice di base per la GUI, in questo modo:

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

Domanda: Come posso creare una rappresentazione visiva del consiglio di amministrazione, in modo che per ogni lista, ci è un rettangolo? Inoltre, c'è un modo per rilevare quando si fa clic su un rettangolo e si sostituisce il valore di lista corrispondente?

Spero che la domanda non sia troppo poco chiara. Grazie!

+3

C'è un motivo per cui ogni elemento della tua scheda è una lista stessa? Voglio dire, il '['_']', '['X']', o '['O']'. Non dovrebbero essere solo elementi, come ''_'','' X'' o ''O''? – ford

+0

Immagino di no. Sto solo imparando Python e questa è stata la mia prima idea, come farlo. Sono sicuro che ci sono modi migliori, ma semplicemente non li conosco. – intelis

+0

@fizzisist: grazie, ho appena editato il codice – intelis

risposta

6

ho creato un consiglio di etichette e di colore in base al quale si fa clic:

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

Questo non fa alcuna convalida (per assicurarsi che l'elemento cliccato si trova in fondo, per esempio). Sarebbe anche molto meglio con le classi anziché i dati globali, ma è un esercizio per il programmatore interessato :).

3

Probabilmente si desidera creare una griglia di Buttons. È possibile ridimensionarli in base ai valori in board e assegnare una richiamata che aggiorni lo board quando si fa clic.

+0

Questo è esattamente quello che ho fatto con la mia versione di * Battleship *. I pulsanti funzionano molto bene per questo scopo –