GRID_W = 41
GRID_H = 41
generation = 0
class Cell:
def __init__(self,r,c,on=0):
self.c = c
self.r = r
self.on = on
def display(self):
if self.on == 1:
fill(0)
else:
fill(255)
rect(SZ*self.r, SZ*self.c, SZ, SZ)
def checkNeighbors(self):
neighbs = 0
if self.on == 1: return 1
for dr,dc in [[-1,0], [1,0], [0,-1],[0,1]]:
try:
if cellList[self.r + dr][self.c + dc].on == 1:
neighbs += 1
except IndexError:
continue
if neighbs in [1,4]:
return 1
else:
return 0
def setup():
global SZ, cellList
noStroke()
size(600, 600)
SZ = width // GRID_W + 1
cellList = createCellList()
def draw():
global generation,cellList
frameRate(10)
cellList = update(cellList)
for row in cellList:
for cell in row:
cell.display()
generation += 1
if generation == 30:
generation = 1
cellList = createCellList()
loop()
def update(cellList):
newList = []
for r,row in enumerate(cellList):
newList.append([])
for c,cell in enumerate(row):
newList[r].append(Cell(r,c,cell.checkNeighbors()))
return newList[::]
def createCellList():
newList=[]
for j in range(GRID_H):
newList.append([])
for i in range(GRID_W):
newList [j].append(Cell(i,j,0))
newList [GRID_H//2][GRID_W//2].on = 1
return newList
GRID_W = 41 #全局变量
GRID_H = 41 #全局变量
generation = 0 #全局变量
class Cell: #Cell类
def init(self,r,c,on=0):#Cell类初始化赋值
self.c = c #Cell类的属性赋值
self.r = r #Cell类的属性赋值
self.on = on #Cell类的属性赋值
def display(self): #Cell类执行的操作1
if self.on == 1: #判断on属性为1,执行fill(0)
fill(0)
else:
fill(255) #否则执行fill(0)
rect(SZ*self.r, SZ*self.c, SZ, SZ) #执行rect函数,参数在括号里
def checkNeighbors(self):#Cell类执行的操作2
neighbs = 0 #初始化临时计数
if self.on == 1: return 1 #判断on属性为1,操作2返回值为1
for dr,dc in [[-1,0], [1,0], [0,-1],[0,1]]: #否则,进入该循环,范围dr,dc in [[-1,0], [1,0], [0,-1],[0,1]],在四个坐标里,dr是x,dc是y
try:
if cellList[self.r + dr][self.c + dc].on == 1:#尝试在celllist中找到任一cell的on属性为1
neighbs += 1 #满足条件,计数+1
except IndexError:
continue
if neighbs in [1,4]: #计数如果为1或4,返回1,否则返回0
return 1
else:
return 0
def setup():#自定义函数
global SZ, cellList #两个全局变量
noStroke() #执行自定义函数
size(600, 600) #执行自定义函数
SZ = width // GRID_W + 1 #关系式执行
cellList = createCellList() #创建celllist数组
def draw():#自定义函数
global generation,cellList#两个全局变量
frameRate(10)#执行自定义函数
cellList = update(cellList)#执行自定义函数update,本文54行
for row in cellList:
for cell in row:
cell.display()#执行cell类的display操作,本文13行定义的
generation += 1 #计数
if generation == 30:#计数满30重新计数
generation = 1
cellList = createCellList()#初始化cellList
loop()
def update(cellList):#自定义函数
newList = []
for r,row in enumerate(cellList):
newList.append([])
for c,cell in enumerate(row):
newList[r].append(Cell(r,c,cell.checkNeighbors()))
return newList[::]
def createCellList():#自定义函数,函数的意思是创建GRID_H*GRID_W个Cell类LIST组(二维),下标全为偶数的cell类on属性为1