Python实现了基于元胞自动机的生命游戏

这次我们用Python实现了生命游戏,这是一个简单的元胞自动机。根据一定的规则,程序可以自动从当前状态推断到下一个状态。成品如下:

让我们来谈谈生活的游戏规则:

在生命的游戏中,每个细胞都有两种状态,生与死。在我们的实现中,黄色细胞代表活细胞,红色细胞代表死细胞。每个单元的下一个状态由该单元及其周围八个单元的当前状态决定。

具体来说:

当前细胞是活细胞。

当前单元是死单元

未安装的标准库:

第三方库:

导入模块:

首先要知道,细胞的生存空间是一个N * N的正方形,每个细胞有两种状态:开ON,关off。开是255,关是0。我们用numpy生成N * N Np.random的方阵,choice是在State.on和State.off中以等概率随机选择一个元素,构造一个N * N的方阵。

其次,我们需要了解如何计算细胞周围活细胞的数量,尤其是那些边界周围有一个圆圈的细胞。我们可以用余数法,假设棋盘大小为9 * 9,那么对于左右边界,左边界的左元素的计算方法是-1% 9 = 8,会自动折叠到右边界。将细胞周围八个细胞的数值相加,除以255,得到细胞周围活细胞的数量。

接下来是规则的翻译,即根据当前一代的状态,推导出下一代细胞的状态。Initial是当前一代的矩阵,data是下一代的矩阵。我们根据初始值计算数据的值。总数是周围活细胞的数量。如果当前细胞是活的,总数大于三或小于二,下一代就会死亡。如果当前细胞死亡,总数等于三,下一代活细胞将繁殖到该细胞。

接下来是制作动画的过程,前几行是画图的基本操作。之后我们使用了matplotlib.animation的方法其中,Funanimation接受的参数的含义:fig是图像句柄,generate函数是我们需要更新每一帧图像的数据的函数,下面会介绍。fargs是genrate函数除第一个参数外的其他参数,第一个参数通过Funanimation指定的framenum(帧数)传递给generate函数。Frames是帧的数量,interval是更新图像的间隔,save_count是从帧到缓存的值的数量。

如果指定了保存路径(html ),它将被保存为html动画。

我们来看一下generate函数,其中NUM是迭代次数,frame_num从FuncAnimation接收帧数。通过嵌套的for循环,我们逐个更新方阵中每个元素的状态。

最后,我们可以通过命令行参数运行我们的程序:

-size参数是棋盘的大小,- seed是随机种子,用来生成不同的随机方格。

戈斯帕滑翔机枪

你可以把滑翔机换成滑翔机。-保存为动画保存的地址。