主题 : 【原创】VB6自制生命游戏——Cellarual
级别: 模拟之星
UID: 154
精华: 1
发帖: 480
威望: 1 星
金钱: 3578 浮游币
贡献值: 12 点
好评度: 307 点
人气: 1 点
在线时间: 80(时)
注册时间: 2004-03-25
最后登录: 2018-09-03
楼主  发表于: 2008-08-03 23:29

【原创】VB6自制生命游戏——Cellarual

说明:

100X100矩阵。
细胞尺寸默认为3。初始化率默认为50%。

Initial:初始化。
Start:开始演化。
Stop:暂停演化。
Step:步进。可以在暂停的时候步进。

Cell Size:细胞尺寸。由于是100X100的。所以放到3比较合适。
Initial Rate:初始化率。是百分比。范围0-100。

Division:本来想做一个矩阵大小的设置。结果发现必须用常数定义数组尺寸。有谁能帮我解决这个问题吗?

Account:当前存活的细胞数目。


之所以选择VB。是因为我对C++的图形函数一点都不了解。

做的比较糙。没有美工。没有出错处理。而且不能规定每一步的演化间隔时间。完全是处理器时间。所以CPU强劲的机器看来可能会闪的比较厉害。
我想解决这个问题。有谁能帮我在VS里面取小于1秒的时间吗?比如0.1秒。或者更小?
还有就是上面提到的Division问题。

欢迎提出建议和意见。谢谢。
[ 此贴被Eiji在2008-08-04 03:27重新编辑 ]
描述:Cellarual
附件: Cellarual.rar (7 K) 下载次数:10
本帖最近评分记录:
  • 金钱:    +100   (操作人:knktc)   支持原创!期待您的改进!
  • In the shadow of the vally of death...
    级别: 模拟之星
    UID: 154
    精华: 1
    发帖: 480
    威望: 1 星
    金钱: 3578 浮游币
    贡献值: 12 点
    好评度: 307 点
    人气: 1 点
    在线时间: 80(时)
    注册时间: 2004-03-25
    最后登录: 2018-09-03
    沙发  发表于: 2008-08-04 19:10

    程序运行说明:
          运行程序,你会看到什么?一大堆神秘的格子在不停的演化运转!
        这是什么玩艺?
        这是一个计算机世界中的宇宙!一个格子就是这个宇宙中的一个生命体,它们在这里生息繁衍!
        啊?太邪乎了吧?这不就是一大堆格子随机的出现、消失么?
        真的那么简单么?仔细观察!这不是简简单单的随机现象,实际上格子的演化在很多时候会呈现出非常好看、非常规则的对称性!(如图1)。
        如果你耐住性子仔细观察你也许会发现一朵美丽的鲜花在你面前盛开(图2);也或许会看到一颗桃心在你的屏幕上涌现出来(图3、4);
        如果你足够幸运,你可能会看到一只蝴蝶(图5)。
        而更多的稳定的对称的格子的群体安静下来,而一旦有外来者侵犯这个世界那么这个局部世界就像沸腾了一样产生不规则的运动。如果你长时间运行并且非常幸运的话,能够看到滑翔机出现!滑翔机是一个匀速直线运动的群体,它会从世界的一段跑道另一端。
        如果你设定的世界尺寸足够大的话(当然你需要为此付出更多的等待时间和耐心),那么你也许会看到,两个格子群体构成的村落分处于世界的两个角落彼此没有来往,然而一个村落发射了一个滑翔机对另一个村落展开了进攻,而另一个村落则由于这个滑翔机的到来打破了原先的寂静开始沸腾起来了。偶尔你会看到一个村落逐渐变大、分化成两个部分分别进行繁衍……,这里的语言不能穷尽这个宇宙所有可能的情况,而只有你运行这个程序才能看到这个宇宙的样子。

    ·一些片断:
             

    图1


    图2


    图3


    图4


    图5

    ·原理:
          这就是细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙,非常可爱的。所有这些怎样实现的呢?我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示兰色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。每个格子的生死遵循下面的原则:如果一个生命体的邻居中有2个或者3个格子是活的话那么它将继续存活下去,否则,如果多于这个数就会因为过分拥挤而死亡,少于这个数就会因为过分孤独而死亡。如果当前格子原先是死的状态,那么当他有3个活着的邻居时他就会获得重生。就是这样把这些若干个格子(生命体)构成了一个复杂的动态世界。运用简单的几条作用规则构成的群体会涌现出很多意想不到的复杂性为,这就是复杂性科学的研究焦点。

        细胞自动机有一个通用的形式化的模型,每个格子(或细胞)的状态可以在一个有限的状态集合S中取值,格子的邻居范围是一个半径r,也就是以这个格子为中心,在距离它r远的所有格子构成了这个格子的邻居集合,还要有一套演化规则,可以看成是一个与该格子当前状态以及邻居状态相关的一个函数,可冶ΡΥ成f:S*S^((2r)^N-1)->S。这就是细胞自动机的一般数学模型。

        最早研究细胞自动机的科学家是冯诺伊曼,后来康韦发明了上面展示的这个最有趣的细胞自动机程序:《生命游戏》,而wolfram则详尽的讨论了一维世界中的细胞自动机的所有情况,认为可以就演化规则f进行自动机的分类,而只有当f满足一定条件的时候,系统演化出来的情况才是有活力的,否则不是因为演化规则太死板而导致生命的死亡,就是因为演化规则太复杂而使得随机性无法克服,系统乱成一锅粥,没有秩序。后来人工生命之父郎顿进一步发展了元胞自动机理论。并认为具有8个有限状态集合的自动机就能够涌现出生命体的自复制功能。他根据不同系统的演化函数f,找到了一个参数lamda用以描述f的复杂性,得出了结论只有当lamda比混沌状态的lamda相差很小的时候,复杂的生命活系统才会诞生,因此,朗顿称生命诞生于“混沌的边缘”!并从此开辟了“人工生命”这一新兴的交叉学科!

        如今细胞自动机已经在地理学、经济学、计算机科学等领域得到了非常广泛的应用!
    In the shadow of the vally of death...
    级别: 模拟之星
    UID: 154
    精华: 1
    发帖: 480
    威望: 1 星
    金钱: 3578 浮游币
    贡献值: 12 点
    好评度: 307 点
    人气: 1 点
    在线时间: 80(时)
    注册时间: 2004-03-25
    最后登录: 2018-09-03
    板凳  发表于: 2008-08-05 16:09

    引用
    引用第5楼天使怪盗于2008-08-04 20:59发表的  :
    一段时间后就稳定下来了?



    是否一定可以稳定下来暂时还没有数学论证。但是目前大概所有的已知实例都可以稳定(其实也不能说是稳定,因为不是不动。而是往复变化)下来。

    我也是学电子的。但我觉得这专业就是听着好听。。。实用太困难了。除非干的特别出色。比如设计手机电路或者芯片程序什么的。所以我改行干FA去了。
    In the shadow of the vally of death...