#2
qqpetbill2023-04-20 21:26
|
忘了之前有没有贴过,再贴是因为不久前发现了游戏中一点忽略的趣味
先引一段文字:(百度文库)
生命游戏( Game of Life) 冯纽曼(John von Neumann)在1940年左右想在理论上构造出一种
能够自我复制的机器. 他成功得到一些定义在笛卡儿平面座标方格的法则井且这些法则能给
出他所要的机器. 不过他的法则非常复杂. 康威(John Conway)采用冯纽曼的想法, 简化之后
在1970年提出生命游戏. 这是最著名的细胞自动机(cellular automaton)的例子, 它引起许多
理论学家的兴趣是因为它是一个万宇图林机(Universal Turing machine). 理论上, 任何可以
编列程式计算的问题都可以在康威的生命游戏中计算. 生命游戏最吸引人的地方是它只有几个
简单规则, 却能产生无穷无尽的变化.
生命游戏的规则如下:
寂寞到死:如果细胞的邻居小于一个,则该细胞在下次状态将死亡。
拥挤到死:如果细胞的邻居在四个以上,则该细胞在下次状态将死亡。
稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。
复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置
将复活一细胞。
解法
生命游戏的规则可简化为某位置有无细胞:
某位置之细胞邻居数为0、1、4、5、6、7、8时,则该位置下次状态必无细胞存活。
某位置之细胞邻居数为2时,则该位置下次状态保持不变(有细胞就有细胞,无细胞就无细胞)。
某位置之细胞邻居数为3时,则该位置下次状态必有细胞存活。
解释一下什么是[下次状态],所有细胞判断生死是同一时间的,就是说,
当前一轮的判断生死,并不即时反应在现况中,等到所有细胞都做了判断,
生与死在下一轮状态才反应出来,亦即,同一轮的判断并不会影响其他细胞.
网上能找到不同其他语言写的生命游戏,汇编呢?老实说没找过,但应该不多.
题目其实并不复杂,也不必一定要绘图,dos的文字模式就可以了,因为80x25的
显示,天然就有格子的效果,图点也不用,随便找个字母就是...
下图是我在dos写的16bit汇篇,界面粗糙(640x480),功能也简单,如下:
1.在WinXP或win7/32bit下,直接在dos运行,若是win7,8,10,11/64bit以上,要用
dosbox或虚拟机
2.一开始是空白一片,运用上下左右,Home,End移动光标,按空白加一个细胞,
再按一下消除,按R加一横列的细胞,按C加一直列的细胞,按F全部细胞反转,即有变无,
无变有,按Del全部清除,按Enter开始游戏,让程式里的细胞自生自灭,按esc离开.
3.开始游戏后,细胞会根据上面的规则自生自灭,按空白暂停,再按一下空白继续,
按左键加速,按右键减速,按Esc返回编辑功能,回到2项加减细胞...
好了,回头之前说的,不久前忽然想到,若细胞不断减少,早晚就会完全死掉,没什么看头.
于是加了些功能:
X:开始时随机位置加细胞,按一次X加10000个
自动补充:
若按N键开始游戏,细胞总数低于12000时,自动每回合补充1000个,共6次,6000个,
细胞总数高于21000时,会暂停自动补充.
因为细胞总数会随时间而自动减少,补充细胞只会在12000~21000间生效.
趣味之处就在于,就算没有21000的上限,不断补充也好,补充量加多也好,
也不能令细胞总数无止境生长,因为上面奇怪的规则(拥挤到死)会让细胞自动减少.
以维持一个稳定的数目,640x400的范围有307200个格位,细胞稳定数目大概是20000上下.
这样像不像地球的生态环境,任何一种生物都不能无止境的扩张,到了一个极限,
生物之间会为争夺资源而开战,致令自身数量减少,减少到一定程度,又会繁殖起来,
周而复始.......
下面是展示画面,整理一下代码(汇编代码大约1300行)有空再贴上来.....
只有本站会员才能查看附件,请 登录
[此贴子已经被作者于2022-10-18 06:20编辑过]