2015-03-02 6 views
14

पाइथन में मेरा कॉनवे का जीवन क्रियान्वयन का खेल नियमों का सही पालन नहीं करता है, और मैं यह नहीं समझ सकता कि क्या गलत हो सकता है। जब मैंने गॉली में अंतिम कॉन्फ़िगरेशन लगाया, तो यह मेरे पिछले काम से पहले जारी रहा।लाइफ पैटर्न का गेम ग़लत ढंग से किया गया

मैंने पहली बार कॉन्फ़िगरेशन डालकर प्रोग्राम की पहचान की जिस पर मेरा प्रोग्राम गॉली में रुक गया, और उसके बाद यह ध्यान दिया जा रहा था कि इसे आगे बढ़ाया जा सकता है।

मैंने अपने गेम से गॉली में एक छोटा सा बोर्ड भी लगाया, और यह मेरी कॉन्फ़िगरेशन से काफी अलग हो गया। गॉली जीवन सिम्युलेटर का एक गेम है जिसका व्यापक रूप से उपयोग किया जाता है।

  • मैं अपने कोड में तर्क बयान तोड़ दिया कोई and/or बयानों का उपयोग करें:

    मैं अपने इस समस्या को ठीक करने के लिए कई अलग अलग बातें की कोशिश की है।

  • मैंने अपने neighbors() फ़ंक्शन को अपने प्रोग्राम में डालने और कुछ ग्रिड कॉन्फ़िगरेशन सेट करके परीक्षण किया।
  • फिर मैंने मुद्रित ग्रिड को देखा, और मैंने एक निश्चित स्थिति पर neighbors() कहा। यह पूरी तरह से काम किया।

मेरा कोड देखकर, मैं नहीं देख सकता कि यह क्यों काम नहीं कर रहा है। मुझे त्रुटियां नहीं मिलती हैं, यह काम करता है, यह सिर्फ गलत काम करता है। पैटर्न उन्हें कैसे करना चाहिए उससे काफी अलग प्रगति करते हैं। यह पहला> 100 लाइन प्रोग्राम भी है जिसे मैंने ट्यूटोरियल का पालन किए बिना भी लिखा है, इसलिए अगर उत्तर स्पष्ट है तो मुझे माफ़ कर दो।

प्रासंगिक कोड इस प्रकार है:

#Function to find number of live neighbors 
def neighbors(row, column): 
    adjacents = 0 

    #Horizontally adjacent 
    if row > 0: 
     if board[row-1][column]: 
      adjacents += 1 
    if column > 0: 
     if board[row][column-1]: 
      adjacents += 1 
    if row < thesize-1: 
     if board[row+1][column]: 
      adjacents += 1 
    if column < thesize-1: 
     if board[row][column+1]: 
      adjacents += 1 

    #Diagonally adjacent 
    if row > 0 and column > 0: 
     if board[row-1][column-1]: 
      adjacents += 1 
    if row < thesize-1 and column < thesize-1: 
     if board[row+1][column+1]: 
      adjacents += 1 
    if row > 0 and column < thesize-1: 
     if board[row-1][column+1]: 
      adjacents += 1 
    if row < thesize-1 and column > 0: 
     if board[row+1][column-1]: 
      adjacents += 1 

    #Return the final count (0-8) 
    return adjacents 

यह पूरी तरह से काम पर लौटने के लिए कैसे किसी भी सेल के 8 पड़ोसियों के कई जीवित हैं लगता है। यह अगला बिट तर्क हिस्सा है, जहां मुझे लगता है कि समस्या है। यह खेल के नियमों के अनुसार सरणी बदलता है।

#Main loop 
while 1: 

    #Manage the rules of the game 
    for r in range(len(board)): 
     for c in range(len(board)): 
      neighborcount = neighbors(r, c) 
      if board[r][c]: 
       giveLife(r, c) 
       if neighborcount < 2 or neighborcount > 3: 
        board[r][c] = False 
      elif not board[r][c]: 
       killRuthlessly(r, c) 
       if neighborcount == 3: 
        board[r][c] = True 

आखिरकार, वह भाग जो पगैम स्क्रीन पर दृश्यों को चालू और बंद करता है। यह परीक्षण किया जाता है, और अच्छी तरह से काम करता प्रतीत होता है, मैंने सोचा कि अगर कोई समस्या हो तो मैं इसे शामिल कर दूंगा।

for r in range(len(board)): 
     for c in range(len(board)): 
      if board[r][c]: 
       giveLife(r, c) 
      if not board[r][c]: 
       killRuthlessly(r, c) 

giveLife, एक समारोह है कि दी गई स्थिति पर एक काले रंग की आयत ड्रॉ है killRuthlessly एक सफेद एक खींचता है। ये दोनों ठीक से काम करने लगते हैं।

+0

[पाइथन के साथ जीवन के Conway के खेल के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/8484802/conways-game-of-life-with-python) – OJFord

+0

यह नहीं है। वे मेरी समस्या से पहले थे। –

+0

यह डाउनवॉटेड क्यों है ?? –

उत्तर

11

तर्क के लिए जो बोर्ड के माध्यम से लूप करता है और आसन्न कोशिकाओं की जांच करता है, यह दूसरों की जांच जारी रखने के दौरान कोशिकाओं को चालू/बंद कर रहा है। ऐसा लगता है कि आप आसन्न कोशिकाओं को जीवित या मृत के रूप में पढ़ रहे हैं क्योंकि वे पिछले समय चरण (जो मायने रखते हैं) में थे, लेकिन क्योंकि आपने अपना राज्य बदल दिया है क्योंकि वे पहले से ही लुप्त हो चुके हैं। tmp_board बनाने का प्रयास करें जो वर्तमान बोर्ड की प्रतिलिपि बनाता है और कौन से संपादन किए जाते हैं। फिर सब कुछ खत्म करने के बाद इसे board पर कॉपी करें।

संबंधित मुद्दे