2017-08-12 3 views
0

Hier ist ein Code von Conways Spiel des Lebens, das ich zwischen zwei Gewürzen von Zellen gemacht habe, die zusammenarbeiten. Ich möchte die Animation nach etwa 10 Generationen stoppen. Ich habe versucht, die "Frames" der Animation zu verwenden, aber die Animation hört nicht auf. Wie höre ich es nach 10 Tagen auf? Hier ist der Code:Animation stoppen - Conways Spiel des Lebens

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import random 

N = 100 
OnTypeOne = 10 
OnTypeTwo= -10 
OFF = 0 
vals = [OnTypeOne , OnTypeTwo, OFF] 


# populate grid with random on/off - more off than on 
grid = np.random.choice(vals, N*N, p=[0.2,0.2, 0.6]).reshape(N, N) 

def update(data): 
    global grid 
    x=0 
    # copy grid since we require 8 neighbors for calculation 
    # and we go line by line 
    newGrid = grid.copy() 
    for i in range(N): 
    for j in range(N): 
     # compute 8-neghbor sum 
     # using toroidal boundary conditions - x and y wrap around 
     # so that the simulaton takes place on a toroidal surface. 
     total = (abs (grid[i, (j-1)%N])+ abs (grid[i, (j+1)%N]) + 
      abs (grid[(i-1)%N, j]) + abs (grid[(i+1)%N, j]) + 
      abs (grid[(i-1)%N, (j-1)%N]) + abs (grid[(i-1)%N, (j+1)%N]) + 
      abs (grid[(i+1)%N, (j-1)%N]) + abs (grid[(i+1)%N, (j+1)%N]))/10 
     # apply Conway's rules 
     if grid[i, j] == OnTypeOne: 
     if (total < 2) or (total > 3): 
      newGrid[i, j] = OFF 
     if (total==3): 
      newGrid[i, j] = OnTypeOne 
     if grid[i, j] == OnTypeTwo: 
      if (total < 2) or (total > 3): 
       newGrid[i, j] = OFF 
      if (total==3): 
       newGrid[i, j] = OnTypeTwo 
     if grid[i, j] == OFF: 
      if total==3: 
       x=random.random() 
       if x<=0.5: 
        newGrid[i,j]=OnTypeOne 
       elif x>0.5: 
        newGrid[i,j]=OnTypeTwo 
      if total!=3: 
       newGrid[i,j]=OFF 




    # update data 
    mat.set_data(newGrid) 
    grid = newGrid 
    return [mat] 

# set up animation 
fig, ax = plt.subplots() 
mat = ax.matshow(grid) 

ani = animation.FuncAnimation(fig, update, frames=10, 
interval=50,save_count=50 
         , blit=True) 

plt.show() 

Antwort

1

Sie benötigen repeat=False das Argument hinzufügen, um die Animation zu sagen, nicht nach 10 Frames neu zu starten,

ani = animation.FuncAnimation(fig, update, frames=10, 
           interval=50, save_count=50, blit=True, repeat=False) 
+0

danken Ihnen sehr viel. Es klappt! – Idit

Verwandte Themen