求帮助分行解释python代码


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