我计划用我新学会的Go语言写一个Conway's Game of Life,这其实也是我们数学大理科的一个备选课题。并使用Go Playground发布,它其实是get-programming-with-go的一个单元的单元作业。这里简单介绍一下Conway's Game of Life(康威生命游戏):
在一个80 × 15网格中有随机的25%网格上有细胞,每个细胞占据一个网格,网格中的每个细胞在水平、垂直和对角线方向上共有8个相邻细胞。注意第15排的细胞的“下面一排”是第一排,第一排的“上面一排”是第十五排;第1列的“左边一列”是第80列,第80列的“右边一列”是第一列。具体规则:
- 当一个存活细胞的相邻8个细胞中的存活细胞少于2个,该细胞死亡
- 当一个存活细胞的相邻细胞中有2个或3个存活时,该细胞延续至下一世代
- 当一个存活细胞临近有多于3个存活细胞时,该细胞死亡
- 当一个死亡细胞临近正好有3个存活细胞时,该细胞出生/保持原有存活状态
我计划每0.1秒刷新一个世代(避免Go处理速度过快像闪屏一样,因为Go可能几纳秒就处理完一个世代了)
完成后我会贴个链接在这里,你们可以直接访问链接点击“Run"运行即可,不用下载Go语言编译器。由于在线编译器的限制,游戏会模拟10000个世代,看完总计1000秒。真是神奇,我居然一行注释都没有写。
Go Playground —— Conway's Game of Life
虽然已经实现了康威生命游戏,但是我有个问题,为什么康威生命游戏里细胞生死变化最终会趋于稳定?
P.S. 默认每次出来的是一样的效果,这是由于Go Playground进行了限制,如果想看不同的输出,请把第54行的rand.Seed(time.Now().UnixNano()
中的time.Now().UnixNano())
换成任意正整数即可
Miki_Sayaka
Admin 2021-02-04T09:20:50Z那个好像不是复活,根据我看到的应该是出生罢
Deleted Flog User
2021-02-04T13:54:23Z那个好像不是复活,根据我看到的应该是出生罢
反正都差不多:-) (我现在不知道为什么特别喜欢用这个表情)
Miki_Sayaka
Admin 2021-02-07T11:52:07Z反正都差不多:-) (我现在不知道为什么特别喜欢用这个表情)
这个表情好像最早是一个美国教授在校园BBS上提出来了,用ASCII码来表示表情符号:-)
Miki_Sayaka
Admin 2021-02-07T11:53:36Z关于那个稳定的问题啊,好像和混沌边缘问题有关,主要调控就是在那个参数3上,如果你试试把它改成4或2,都会有一些意想不到的效果的
Miki_Sayaka
Admin 2021-02-07T11:54:21Z其实你可以在Conway生命游戏中寻找一下周期一到周期27的图形,那是挺有意思的
Miki_Sayaka
Admin 2021-02-07T11:55:27Z我看到过一个周期三的图形,名字叫(此处省略),还是挺有意思的
Miki_Sayaka
Admin 2021-02-07T11:55:56Z话说Conway's Game of Life周期三的图形好像挺少的
Miki_Sayaka
Admin 2021-02-07T11:56:32Z它好像还和元胞自动机的原理有点关系的,也使得我突然想起了我们的马尔萨斯人口模型了
Itachi
Admin Author 2021-02-07T12:27:09Z它好像还和元胞自动机的原理有点关系的,也使得我突然想起了我们的马尔萨斯人口模型了
是的,我也看过一点元胞自动机的资料。说句题外话,康威教授是得了COVID-19在去年4月11日去世的,真诚地希望他Rest In Peace(非恶意)。