Python——Pygame实现生命游戏(game of life)
程序员文章站
2022-05-04 14:17:29
模块:pygame 该代码的实现策略是遍历所有像素点,判断每个像素点下一代的状态,然后每个像素点状态写入数组,根据数组更新画面 这个方法有点暴力,像素过多的话会大量消耗资源,很慢 ......
模块:pygame
import pygame,sys,time,random from pygame.locals import * """color""" white = (255,255,255) red = (255,0,0) green = (0,255,0) """color""" def neighbor(x,y):#返回周围存活细胞数 alive = 0 around = ((x+1,y+1),(x+1,y),(x+1,y-1),(x-1,y),(x-1,y+1),(x-1,y-1),(x,y-1),(x,y+1),) for a in around: color = win.get_at(a) if color == red: alive += 1 return alive def init(): so = 200000 for number in range(0,so): pygame.draw.rect(win,red,(random.randint(0,size[0]),random.randint(0,size[1]),1,1)) print('so = ',so) def rule(i,j): if neighbor(i,j) < 2: return false elif win.get_at((i,j)) == red: if neighbor(i,j) == 2 : return true elif neighbor(i,j) == 3: return true elif neighbor(i,j) > 3: return false elif neighbor(i,j) == 3: return true pygame.init() size = (800,800) win = pygame.display.set_mode(size) pygame.display.set_caption("game of life") win.fill(white) init() gen = 0 while true: next_alive = [] next_dead = [] for event in pygame.event.get(): if event.type == quit: pygame.quit() sys.exit(0) x = size[0] y = size[1] for i in range(10,x-10): for j in range(10,y-10): if rule(i,j): next_alive.append((i,j)) win.fill(white) print('alive =',len(list(set(next_alive)))) for x,y in list(set(next_alive)): pygame.draw.rect(win,red,(x,y,1,1)) # for x,y in next_dead: # pygame.draw.rect(win,green,(x,y,1,1)) gen += 1 print(gen) pygame.display.update()
该代码的实现策略是遍历所有像素点,判断每个像素点下一代的状态,然后每个像素点状态写入数组,根据数组更新画面
这个方法有点暴力,像素过多的话会大量消耗资源,很慢