我计划用我新学会的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())换成任意正整数即可

9 comments
latest

  • Miki_Sayaka
    Admin

    那个好像不是复活,根据我看到的应该是出生罢

  • Deleted Flog User
    Miki_Sayaka:
    那个好像不是复活,根据我看到的应该是出生罢

    反正都差不多:-) (我现在不知道为什么特别喜欢用这个表情)

  • Miki_Sayaka
    Admin
    :
    反正都差不多:-) (我现在不知道为什么特别喜欢用这个表情)

    这个表情好像最早是一个美国教授在校园BBS上提出来了,用ASCII码来表示表情符号:-)

  • Miki_Sayaka
    Admin

    关于那个稳定的问题啊,好像和混沌边缘问题有关,主要调控就是在那个参数3上,如果你试试把它改成4或2,都会有一些意想不到的效果的

  • Miki_Sayaka
    Admin

    其实你可以在Conway生命游戏中寻找一下周期一到周期27的图形,那是挺有意思的

  • Miki_Sayaka
    Admin

    我看到过一个周期三的图形,名字叫(此处省略),还是挺有意思的

  • Miki_Sayaka
    Admin

    话说Conway's Game of Life周期三的图形好像挺少的

  • Miki_Sayaka
    Admin

    它好像还和元胞自动机的原理有点关系的,也使得我突然想起了我们的马尔萨斯人口模型了

  • Itachi
    Admin Author
    Miki_Sayaka:
    它好像还和元胞自动机的原理有点关系的,也使得我突然想起了我们的马尔萨斯人口模型了

    是的,我也看过一点元胞自动机的资料。说句题外话,康威教授是得了COVID-19在去年4月11日去世的,真诚地希望他Rest In Peace(非恶意)。