2016-04-08 29 views
1

我正在實施Conway的Python生活遊戲,並且想製作一個小GUI以查看模型的演變。Python Conway生命執行遊戲

我的代碼:

def __init__(self,grid): 
     self.top = Tkinter.Tk() 

     self.multiplier = 50 

     self.gridSize = grid.getSize() 
     self.gridArray = grid.getGrid() 



     self.C = Tkinter.Canvas(self.top, bg="black", height = self.gridSize[1]*self.multiplier, 
          width=self.gridSize[0]*self.multiplier) 
     self.C.pack() 


    def renderGrid(self, grid): 



     for x in range(0,self.gridSize[1]-1): 
      for y in range(0,self.gridSize[0]-1): 

       agent = grid.getAtPos(Coordinates2D(x,y)) 
       agent = agent[0] 

       mx = x*self.multiplier 
       my = y*self.multiplier 

       if(agent.state == 0): 
        p = self.C.create_rectangle(mx,my,mx+self.multiplier,my+self.multiplier, 
      fill="white", width=3) 

     self.C.update() 

我基本上希望能夠網格對象傳遞給這個類,並把它更新畫布繪製白色方塊的地方代理具有狀態0

這枚原則上工作(即:它產生初始顯示),它似乎沒有更新。我打電話給它的代碼:

grid = ObjectGrid2D(10,10, "golgrid") 
g = GameOfLifeRenderer(grid) 


for i in range(10): 
    print i 
    for x in range(10): 
     for y in range(10): 

      h = GOLCell(1) 
      h.state == 0 
      grid.moveAgent(Coordinates2D(x,y), h) 
    g.renderGrid(grid) 
    sleep(5) 

有關如何改進我的代碼的任何建議?

謝謝!

+0

有一個比包含'sleep'的自定義循環更好的方法來執行動畫。請參閱http://stackoverflow.com/a/25431690/7432 –

回答

2

它看起來並不像是在更新你的forloop中的畫布。嘗試在grid.moveAgent(...)之後添加以下行

g.C.update() 
+0

我每次調用renderGrid模型時,renderGrid都以self.C.update()結束,因此應該使用它? – MrD

+1

是的,它在所有東西都移動之後更新網格(畫布),但不會在每次迭代時更新。因此,爲什麼你看不到網格正在移動 – Pythonista

+0

感謝你! – MrD