Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

生命游戏——元胞自动机程序实现C++

  

=====================================================================

晚上闲着没事干,鉴于前一段时间数学建模中看到了生命游戏 Game of Life,所以用C++实现一下,效果还不错。

 

首先简单介绍一下《生命游戏》

  生命游戏其实是一个零玩家游戏。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。具体如下图:

每个格子的生死遵循下面的原则:

  1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。

  2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

  3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。

图案:

有三类图案:

第一类这种图案是固定不变的:

第二类:是按规律变化的:

第三类:是不断变化和移动的,但是有一定的周期性,最著名的就是  滑翔机:

======================================================

关于生命游戏就先简单介绍到这里,下面是自己的实践

如果一个胞子周围有3个活的,那么这个胞子就活,我们把这个数目称为burn,如果一个胞子周围有2个活的,那么这个胞子将不变,我们把这个数目称为live。

经过运行,当burn=1,live=2时,这个会生成一个随机的迷宫样式的图案,如下图:

当burn=1,live=其他时,都不会得到迷宫式的图案,只会看到毫无规律的杂点。

当burn=2,live=其他时,会得到一些杂乱的点闪动

当burn=3,live=2时,这时胞子的成活率很高,而且繁殖有一定的规律可循,是这种规则下胞子繁殖的最佳环境:

当burn=3,live != 2时,胞子的死亡率很高。

当burn>3时,胞子几乎无法生存和繁衍,很显然,这时的胞子生存的环境依赖性很高。

由此我们可以判定,一个物种的最佳生存环境是既不能太依赖环境,也不能不依赖环境。关于生命游戏的知识还很多,有空慢慢分享吧。

最后要隆重介绍一个著名的例子:Gosper的机枪在制造滑翔机,看下图,你发现了了么?

posted on 2010-02-08 21:56 Lvpengms 阅读(...) 评论(...) 编辑 收藏