实践探索:使用 Python 实现 Conway 生命游戏
Conway's 生命游戏是由数学家 John Horton Conway 发明的细胞自动机。这个游戏是一个零人参与的游戏,通过简单的规则来模拟细胞的繁殖和死亡。以下是使用 Python 实现生命游戏的一个简单示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update(frameNum, img, grid, N):
# 创建一个新的网格来存储下一代状态
newGrid = grid.copy()
for i in range(N):
for j in range(N):
# 计算周围存活的细胞数量
total = int((grid[i, (j-1)%N] + grid[i, (j+1)%N] +
grid[(i-1)%N, j] + grid[(i+1)%N, j] +
grid[(i-1)%N, (j-1)%N] + grid[(i-1)%N, (j+1)%N] +
grid[(i+1)%N, (j-1)%N] + grid[(i+1)%N, (j+1)%N]) / 255)
# 生命规则
if grid[i, j] == ON:
if (total < 2) or (total > 3):
newGrid[i, j] = OFF
else:
if total == 3:
newGrid[i, j] = ON
# 更新图像数据
img.set_data(newGrid)
grid[:] = newGrid[:]
return img,
def main():
N = 100
grid = np.random.choice([ON, OFF], N*N, p=[0.2, 0.8]).reshape(N, N)
# 设置图像
fig, ax = plt.subplots()
img = ax.imshow(grid, interpolation='nearest')
# 动画显示网格
ani = animation.FuncAnimation(fig, update, fargs=(img, grid, N),
frames=10, interval=200, save_count=50)
plt.show()
ON = 255
OFF = 0
vals = [ON, OFF]
if __name__ == '__main__':
main()
代码解析
初始化网格:
- 使用
numpy
随机初始化网格,选择细胞是活着(ON)或死亡(OFF)。 N
定义网格的大小。
- 使用
更新函数:
- 遍历每个细胞,根据邻居的存活数量应用生命游戏的规则。
- 更新后的网格替换旧网格。
规则:
- 活细胞:如果活细胞周围有少于2个或多于3个活邻居,它会死亡。
- 死细胞:如果死细胞周围有正好3个活邻居,它会复活。
显示和动画:
- 使用
matplotlib
创建图像并动态显示细胞的演变过程。
- 使用
这个实现提供了一个基础的框架,可以进一步扩展,比如添加不同初始条件或改变网格的大小与形状等。