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
所以我正在制作 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