2017-08-12 121 views
0

这里是康威的生命游戏代码,我在两种配合的细胞香料之间制作的游戏。 我想让我们说10代后停止动画。 我试图使用动画的“帧”,但动画不停止。 如何在10个基因组后停止它? 下面是代码:停止动画 - 康威的生命游戏

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

回答

1

您需要添加参数repeat=False告诉不要在10帧启动动画,

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

非常感谢你。有用! – Idit