from pylab import * from scipy.ndimage import filters,measurements import pygame from pygame import surfarray matplotlib.rc("image",cmap="gray") matplotlib.rc("image",interpolation="nearest") pygame.init() OR = logical_or AND = logical_and def unif(lo,hi,size=1): if size==1: return rand()*(hi-lo)+lo if type(size)==int: return rand(size)*(hi-lo)+lo return rand(*size)*(hi-lo)+lo w,h = 512,512 screen = pygame.display.set_mode((w,h)) surface = pygame.Surface((w,h),depth=8) def animate(images,n=20): for i,image in enumerate(images): if i>=n: break b = array(255*clip(image,0,1),'B') pygame.surfarray.blit_array(surface,b[:w,:h]) screen.blit(surface,(0,0)) pygame.display.flip() return image def random(p): return 1.0*(rand(w,h)=34,OR(n<=45,AND(n<=58,a))) _=animate(iterate(bugs,random(0.5)),2000) def life(s): a = array(s!=0,'f') n = floor(0.5+3*3*filters.uniform_filter(a,3,mode='wrap')-a) return AND(n>=2,OR(n==3,AND(n<=3,a))) _=animate(iterate(life,random(0.5)),2000)