2013-01-16 19 views
6

के साथ एक खेल बोर्ड बनाना मैं Python(2.7)
अजगर और Tkinter

साथ Connect Four का एक सरल खेल का निर्माण करने की कोशिश कर रहा हूँ मुझे लगता है कि एक साधारण बहुआयामी अजगर सूची के होते हैं एक बोर्ड, बनाया है।
मेरे बोर्ड सूची इस प्रकार है:

board = [ 

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

]

थे एक्स Player1 है और हे player2 (या कंप्यूटर) है।

अब, मैं जीयूआई लिए कुछ बुनियादी कोड बनाया है, इस तरह:

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

प्रश्न: मैं कैसे बोर्ड का एक दृश्य प्रतिनिधित्व बना सकते हैं, ताकि हर सूची के लिए, वहाँ एक आयताकार है? साथ ही, पता लगाने का कोई तरीका है, जब एक आयताकार क्लिक किया जाता है और इसी सूची मूल्य को प्रतिस्थापित करता है?

मुझे आशा है कि प्रश्न बहुत अस्पष्ट नहीं है। धन्यवाद!

+3

क्या कोई कारण है कि आपके बोर्ड का प्रत्येक तत्व एक सूची है? मेरा मतलब है, '[' _ '] ',' ['एक्स']', या '[' ओ '] '। क्या वे तत्व नहीं हो सकते हैं, जैसे ''_'',' 'X'', या' O'' '? – ford

+0

मुझे नहीं लगता। मैं सिर्फ पाइथन सीख रहा हूं और यह मेरा पहला विचार था, इसे कैसे करें। मुझे यकीन है कि बेहतर तरीका है, लेकिन मैं उन्हें नहीं जानता। – intelis

+0

@ फिजिसिस्ट: धन्यवाद, मैंने कोड – intelis

उत्तर

6

मैं लेबल का एक बोर्ड बनाया है और जो करने के लिए क्लिक किया जाता है अनुसार उन्हें रंग:

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

यह किसी भी सत्यापन नहीं करता है (यह सुनिश्चित करें कि तत्व क्लिक उदाहरण के लिए नीचे स्थित है बनाने के लिए)। यह वैश्विक डेटा की बजाय कक्षाओं के साथ भी बेहतर होगा, लेकिन यह दिलचस्पी कोडर के लिए एक अभ्यास है :)।

3

शायद आप Buttons का ग्रिड बनाना चाहते हैं। आप उन्हें board में मानों के अनुसार शैलीबद्ध कर सकते हैं, और कॉलबैक असाइन कर सकते हैं जो क्लिक किए जाने पर board अपडेट करता है।

+0

कोड को संपादित किया है, वही है जो मैंने * बैटलशिप * के अपने संस्करण के साथ किया था। बटन इस उद्देश्य के लिए उल्लेखनीय रूप से अच्छी तरह से काम करते हैं –