本文最后更新于 677 天前,其中的信息可能已经有所发展或是发生改变。
By Chatgpt
Life Game
import numpy as np
import matplotlib.animation
import matplotlib.pyplot as plt
def game_of_life(Z):
# 计算周围8格的和
N = (Z[0:-2, 0:-2] + Z[0:-2, 1:-1] + Z[0:-2, 2:] +
Z[1:-1, 0:-2] + Z[1:-1, 2:] +
Z[2:, 0:-2] + Z[2:, 1:-1] + Z[2:, 2:])
# 规则 1 或规则 3
birth = (N == 3) & (Z[1:-1, 1:-1] == 0)
survive = ((N == 2) | (N == 3)) & (Z[1:-1, 1:-1] == 1)
# 生成新的数组并返回
Z[...] = 0
Z[1:-1, 1:-1][birth | survive] = 1
return Z
# 定义一些初始化的数据集合
rabbits = np.array([[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.]])
glider = np.array([[0, 0, 0],
[0, 0, 255],
[255, 255, 255]]) / 255
def plot_game(Z):
plt.imshow(Z, cmap=plt.cm.gray_r, interpolation='nearest')
plt.xticks([]), plt.yticks([]) # 隐藏坐标轴
# 定义一个函数,用于更新生命游戏的图像
def update_game(frame_number, img, Z):
newZ = game_of_life(Z)
img.set_data(newZ)
return img,
np.random.seed(0) # 设置随机数种子,以便复现相同的随机数序列。
Z = np.random.randint(0, 2, size=(100, 100)) # 生成一个100*100的随机整形数组。
fig1 = plt.figure() # 创建一个图形对象。
img = plt.imshow(Z, cmap=plt.cm.gray_r, interpolation='nearest')
anim = matplotlib.animation.FuncAnimation(
fig1, update_game, fargs=(
img, Z), frames=10, interval=200)
plt.show()