2016-04-08 23 views
1

Ich implementiere Conways Spiel des Lebens in Python und möchte eine kleine GUI produzieren, um das sich entwickelnde Modell zu sehen.Python Conway Spiel des Lebens Implementierung

Mein Code:

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

ich im Wesentlichen in der Lage sein wollen, ein Raster-Objekt dieser Klasse zu übergeben und haben es die Leinwand zeichnen weiße Quadrate zu aktualisieren, wo ein Agent Status 0.

Während dies hat funktioniert im Prinzip (Ie: Es erzeugt die anfängliche Anzeige) es scheint nicht zu aktualisieren. Der Code, von dem ich es nenne:

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) 

Irgendwelche Ratschläge, wie ich meinen Code verbessern könnte?

Danke!

+0

hinzuzufügen Es gibt bessere Möglichkeiten, Animation als eine benutzerdefinierte Schleife zu tun, die 'sleep' enthält. Siehe http://StackOverflow.com/a/25431690/7432 –

Antwort

2

Es sieht nicht so aus, als würden Sie die Arbeitsfläche in Ihrem Forloop aktualisieren. Versuchen Sie, die folgende Zeile nach grid.moveAgent(...)

g.C.update() 
+0

Ich rufe renderGrid jedes Mal auf, wenn mein Modell gestuft wird und renderGrid endet mit self.C.update(), so dass es od it? – MrD

+1

Ja, es aktualisiert das Raster (Canvas), nachdem alles verschoben wurde, aber nicht aktiv, um es bei jeder Iteration zu aktualisieren. Daher, warum Sie nicht sehen, das Gitter bewegt wird um – Pythonista

+0

Sinn macht Dank! – MrD

Verwandte Themen