如何用c语言编生命游戏程序

如何用c语言编生命游戏程序,第1张

写了这么多,记得追点分啊~~~~~`

这个问题分解为两部分

1、用什么方式表示某时刻有哪些细胞是活的

一种简单的想法是用一个二位数组将某时刻所有的细胞的状态都记录下来,不过这样的内存开销太大,同时又给细胞网格设定了界限,而且效率也并不高

比较好的做法是用一个线形表int list[][2]来记录某时刻的所有的活细胞的坐标,同时用一个整数int n记录当前的活细胞数量

2、如何从某时刻的状态推导出下一时刻有哪些细胞为活的

根据规则,显然,某时刻某个细胞是否活着完全取决于前一时刻周围有多少活着的细胞,以及该时刻该细胞是否活着

因此,推导下一时刻状态时,根据当前list中的活细胞,可以得到该时刻有哪些细胞是与活细胞相临的,进而得知这些细胞在该时刻与多少个活细胞相临,于是可以知道下一时刻有哪些细胞是活的

具体实现时,需要一个能够储存坐标并给每个坐标附带了一个计数器(记录该坐标的细胞与多少个活细胞相临)和一个标志(0或1,表示当前该坐标的细胞是活是死)的容器,假设为T,容器T的功能是检查某个坐标是否在其中,以及向其中添加带有某个标志某个坐标并将该坐标的计数器清零,以及将某个坐标的计数器累进一

比如,假设已经定义了

struct Container

{

};//容器类型

void Clear(Container T);//清空容器T

int Exist(Container T,int x,int y);//返回坐标(x,y)是否存在于T中

void Insert(Container T,int x,int y,int flag);//将标志为flag的坐标(x,y)加入T

void Add(Container T,int x,int y);//将坐标(x,y)的计数器累加

void Promote(Container T,int n,int list[][2]);//将容器中所有计数器值为3的坐标以及所有计数器为2并且标志为1的坐标添加到list中,并将其个数记录于n

此外,为了方便找出某个坐标的所有相邻坐标,设置以下方向常量

const int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};

那么,从某时刻状态生成下一时刻状态的主要代码如下

Container T;

int i,j;

Clear(&T);

for (i=0;i<n;i++) Insert(&T,list[i][0],list[i][1],1);

for (i=0;i<n;i++)

for (j=0;j<8;j++)

{

int x,y;

x=list[i][0]+dir[j][0];

y=list[i][1]+dir[j][1];

if (!Exist(&T,x,y)) Insert(&T,x,y,0);

Add(&T,x,y);

}

Promote(&T,&n,list);

关于容器T如何实现,一种简单的思路是用线形表并将元素有序记录,不过这样的查找/插入效率难以兼顾

用哈希表的话,最后的Promote很难实现

块状链表可以兼顾查找与插入的效率,但是写起来太恶心,效率也不是特别高

个人认为,最佳的解决方案是用平衡二叉搜索树,常见的AVL树或者红黑树什么的,不过写起来也太麻烦。

这里强烈推荐Size Balanced Tree,由中国一位现在读高二的高中生所发明,原理清晰,效率高,实现简单

不是。程序性知识是个人没有有意识提取线索,只能借助某种作业形式间接推论其存在的知识,生命在于运动不是。程序性知识是一套办事的 *** 作步骤,是关于“怎么办”的知识,在学习过程性知识的第一个阶段,是习得过程性知识的陈述性形式,新知识进入原有的命题网络,与原有知识形成联系。

大多数激素是蛋白质,蛋白质的合成是受基因控制的,也就是遗传信息的传递方向,书上有个“中心法则”,过程: 由DNA转录成mRNA,就是基因的选择表达,不同的细胞选择转录的基因不同,所以“根本是基因组程序性表达的结果” 动物也是这样。微生物这里比较复杂,有的微生物是病毒,遗传物质只能是DNA或者RNA,遗传表达的方式不同,不过高中阶段,这方面不需要。

编写示例代码如下:

Private Sub Command1_Click()

    Dim Birthday As Date   '出生日期

    Dim DieDay As Date    '死亡日期(100岁)

    Dim Days As Long     '剩余天数

    

    Birthday = CDate(Text1Text)

    DieDay = DateAdd("yyyy", 100, Birthday) '计算出死亡日期,也就是100岁生日

    Days = DateDiff("d", Now, DieDay)

    

    If Days = 0 Then

        Label2Caption = "今天正是归期!"

    ElseIf Days < 0 Then

        Label2Caption = "墓地草色青青已经" & vbCrLf & vbCrLf & Days & " 天啦!"

    Else

        Label2Caption = "珍惜生命!" & vbCrLf & vbCrLf & "你当前还有 " & Days & " 天寿命。"

    End If

End Sub

运行截图:

我们生活的世界即普通又不普通,说它普通是因为我们每天都生活在这个世界里面,似乎对这个世界再熟悉不过,甚至懒得再去了解它,曾经我们对这个世界的好奇心随着时间的推移而慢慢丧失,再也提不起兴趣;说它不普通,是因为在这个看似熟悉的世界里面依然存在很多科学无法解释的谜团,比如人类的意识是怎么产生的、世界上有没有灵魂、百慕大魔鬼大三角消失之谜、人类究竟从哪里来、外星人存在吗、地球起源之谜等等,各种各样的谜团让人类剪不断理还乱,其他问题先放在一边,我们就来说说地球起源之谜和人类起源之谜这两个谜团。

太阳系看起来像是一个精密的运动仪

地球是如何诞生的?科学的解释是地球是太阳周围的尘埃在引力作用下不断旋转,经过长时间的积累和演变最终形成了如今的地球;对于人类起源之谜,科学家也给出了解释,认为人类起源于低等动物,低等动物又是从简单生物进化而来的,简单生物最开始是由生命最基本物质氨基酸和蛋白质进化来的,而氨基酸和蛋白质则通过非生命物质经过复杂的化学反应变成的,由此可以得出一个结论,人类是由非生命物质经过长时间的演变和进化而来的。

地球生物进化趋势

从科学的解释来说,地球和人类都是自然产生的,这个结论似乎成为公认的事实,但是依然存在比较大的争议,因为我们生活的地球或者说这个世界存在太多的巧合,不过这些巧合数量太多,无法全部说出来,下面就举出几个比较经典的巧合。

第一个巧合:动物为什么都存在雌雄两种性别?

目前世界上生物的繁殖方式主要分为有性繁殖和无性繁殖,而动物几乎都使用有性繁殖,而有性繁殖必须要雌雄两种性别配合才能繁衍后代,很难想象在生命最初的状态,自然界是如何知道为动物安排两种不同的性别来保证动物繁衍的,难道自然界也有识别性别的能力,知道动物需要繁衍后代,所以自动进化出雌雄两种性别,问题是进化是一个非常漫长的过程,如果世界上产生的第一个动物是雄性,还没进化出雌性动物就灭绝了,如何在短时间内同时诞生出雌雄两种性别保证动物繁衍后代呢?似乎除了“人为”设计以外没有更好的解释了,从这个巧合我们知道,自然进化根本不可能同时进化出不同性别的生物,因为自然界没有识别能力,只要“人为”估计才考虑的如此周全。

动物雌雄两种性别

第二个巧合:自然界为什么无法避免死亡?

生老病死是自然规律,谁都无法改变,可是死亡对于任何生物来说是残忍的、痛苦的、排斥的,既然如此排斥死亡,为什么世界上没有一种生物可以进化成为永生的生物,或者抛弃掉死亡,其实不是不想抛弃,实在是抛弃不掉啊,像人类这样拥有超高智慧的生物面对死亡也束手无策,人类可以改变环境、可以按照自己意愿进化、甚至可以毁灭全世界,唯独在死亡这件事上始终改变不了,因此死亡或许是被故意设计出来的一个规律,目的是为了维持整个世界的平衡,除了设计者,谁都改变不了这个铁一般的规律。

生老病死是自然规律,无法改变

第三个巧合:为何只诞生人类一种高智慧生物?

在地球上存在850万种生物,其中包括150万种动物,在将近1000万种生物中却仅仅只出现人类一种高智慧生物,这令人难以置信,如果说世界上多诞生出几种高智商生物或者全部都是非智慧生物,我们或许不会怀疑这个世界,但是却偏偏诞生人类这种唯一的高智商生物,让人不得不怀疑人类可能是为了某种目的被故意创造出来的,很多证据似乎在表明,人类出现在这个世界上不简单。比如为了不让人类在宇宙乱跑,设计者设置重重障碍(光速不可超越、奥尔特星云、宇宙墙)等,就好比人类为了不让动物逃跑需要设置绳子套、铁栏、围栏等。

人类的大脑极其复杂,更像是经过精心设计

除了以上的那些巧合,其他巧合在我们这个世界普遍存在,比如地球到太阳距离刚刚好,地球引力刚刚好、太阳系刚好位于银河系宜居地带、刚好有木星月球保护地球这些巧合都集中发生在我们这个世界,似乎在说明一个问题,那就是我们的世界可能是一个虚构的世界,整个世界就是一个被设计好的虚拟的程序,世界上发生的各种巧合其实都是程度的代码在正确的执行命令,就是这些代码在维持着太阳系、地球和整个世界有秩序的运行和生命的正常繁衍。

世界可能就是一个被设定好的程序

当然程序也有可能存在不BUG,每次发生大BUG的时候,世界都需要重启,每次重启都会导致生物大灭绝,同时又会产生新的生命形态,同时由于程序的防火墙不是很严密,总是会发生病毒入侵的风险,这些“病毒”包括小行星、彗星和陨石,历史上最严重的一次“病毒入侵”发生在6500万年前,直接导致恐龙灭绝。

光速是人类不可逾越的鸿沟,因为它可能被程序给“写死”了

如果世界真的是一个虚拟程序,那么人类的寿命、活动范围、速度、大脑潜力等可能都已经被程序给“写死”了,这也是为什么人类无法实现永生、无法飞出太阳系、无法超越光速、无法100%开发大脑潜力的原因,也就是说人类的命运可能不掌握在我们手里,有可能掌握在神秘力量手里,还是不要继续往下想了,越想越细思极恐,会睡不着的。

以上就是关于如何用c语言编生命游戏程序全部的内容,包括:如何用c语言编生命游戏程序、生命在于运动是程序性知识吗、植物的生命活动是基因组程序性表达的结果,动物呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9495549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存