Conways Game of Life 仅在两帧之间切换 - Python

Conways Game of Life only switches between two frames - Python

所以我正在制作 Conway 的人生游戏,我完成了 most/all,但它所做的只是在两帧之间切换。我很确定逻辑是正确的,因为在动画开始时一些单元格消失了,但之后什么也没有发生。我真的卡在这里了,所以我希望你能帮助我。

这是我的完整代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
import random

Size=(60,60)
off=False
amount=0.3

def mapify():
    total=Size[0]*Size[1]
    arr=np.zeros(Size)
    while sum(sum(arr)) < int(total*amount):
        y=random.randrange(0, Size[1])
        x=random.randrange(0, Size[0])
        if arr[y][x]==0: arr[y][x]=1
    return arr

class cell:
    #Map = np.random.randint(2, size=Size)
    Map=mapify()
    cells=[[] for i in range(Size[0])]
    def __init__(self, row, col):
        self.r=row
        self.c=col
        self.stat=cell.Map[row][col]
        cell.cells[row].append(self)

    def findnb(self):
        Map=cell.Map
        li=[]
        for a in range(-1, 2):
            for b in range(-1, 2):
                try:
                    if a!=0 and b!=0: li.append(Map[self.r+a][self.c+b])
                except:
                    pass
                
        self.nb = sum(li)

    def apply(self):
        self.findnb()
        if self.stat and self.nb>1 and self.nb < 4:
            return 1
        elif not self.stat and self.nb==3:
            return 1
        else:
            return 0

for i in range(Size[0]):
    for j in range(Size[1]):
        cell(i, j)

ax = plt.axes()


while off==False:
    cell.Map=np.reshape(
        [[c.apply() for c in r] for r in cell.cells],
        Size)
    
    ax.matshow(cell.Map, cmap='Greys')
    plt.draw()
    try:
        plt.pause(0.01)
    except:
        break

编辑:我解决了!我是逻辑门的傻瓜,这里是解决方案:

for a in range(-1, 2):
        for b in range(-1, 2):
            try:
                if not (a==0 and b==0):li.append(Map[self.r+a][self.c+b])
            except:
                pass

我弄乱了检查所有邻居的 if 语句,这是工作代码

for a in range(-1, 2):
        for b in range(-1, 2):
            try:
                if not (a==0 and b==0):li.append(Map[self.r+a][self.c+b])
            except:
                pass