请选择 进入手机版 | 继续访问电脑版

不学网

 找回密码
 加入不学网

只需一步,快速开始

手机号码,快捷登录

查看: 543|回复: 3

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

[复制链接]

27

主题

41

帖子

6825

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6825
发表于 2018-1-7 11:38:43 | 显示全部楼层 |阅读模式
更新:程序源码可以从百度网盘下载:下载元胞自动机源码及程序
本程序是用vs2005 C++编写,建议使用VS2005或者更高版本编译。
=====================================================================

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



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

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

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

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

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

图案:

有三类图案:

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

2.jpg
第二类:是按规律变化的:

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

3.jpg

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

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

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

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

4.jpg

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

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

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

5.jpg

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

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

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

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

6.jpg

本地下载: GameOfLife.rar (2 MB, 下载次数: 51)
失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
回复

使用道具 举报

3

主题

5

帖子

113

积分

超级版主

Rank: 8Rank: 8

积分
113
发表于 2018-1-11 12:11:48 | 显示全部楼层
飞哥你再发开开发,给这些小点能多的属性,什么生命值,饥饿值之类的东西,赋予这些小点更多的行为,例如攻击,防御,狩猎,隐藏等等,再开发一个脚本,能够让用户自定义小点的行为。嗯,这样就差不多了!
不学网,不只是学习,更是学会如何学习。
回复

使用道具 举报

3

主题

5

帖子

113

积分

超级版主

Rank: 8Rank: 8

积分
113
发表于 2018-1-11 12:16:05 | 显示全部楼层
之后给程序员们开发一个小点点大作战的游戏,程序员们用脚本控制数以万计的小点在一个地图中厮杀,角逐出最后的胜者
不学网,不只是学习,更是学会如何学习。
回复

使用道具 举报

27

主题

41

帖子

6825

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6825
 楼主| 发表于 2018-1-11 12:19:48 | 显示全部楼层
Smalldy 发表于 2018-1-11 12:16
之后给程序员们开发一个小点点大作战的游戏,程序员们用脚本控制数以万计的小点在一个地图中厮杀,角逐出最 ...

这个不是我搞的
失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入不学网

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-2-18 05:27

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表