生命游戏

2020/04/19 Hobbies

我第一次听说生命游戏是在高中的时候,那时候一下子就被它的奇妙规则给吸引了,但奈何当时条件有限,没学编程,也没有电脑,就只能纯手工在纸上画,最后把纸画破了,还是没画对。因为总会有遗漏。这次偶然在YouTube上看到@s0lly的视频,用Excel画生命游戏,顿时来了兴趣,就把过程记了下来。

首先打开Excel,把部分表格调成正方形,范围随便定,这里打算用20*20的表格演示,因此范围稍大于20*20。

选中n列表格后,按住Shift可以统一调整宽度,这里调为25像素,行表格也一样。然后添加边框。将此工作表改名为Current State。

GL01

随便在表格内填充1和0,可以智能快速填充,也可以复制粘贴。

GL02

选中20*20的表格范围,在条件格式选择色阶中的绿-白色阶。

GL03

然后继续管理规则,双击规则,将规则编辑至如下所示

GL04

即最小者和最大值都用选择数字,然后分别调为0和1,最大值的颜色改为黑色

继续选中表格,右键设置单元格格式,在数字一栏下选中自定义,然后在类型里填入一对英文双引号,这样表格就不会显示0和1了,但其值依然是0和1。

GL05

GL06

接下来,复制两个相同的工作表,其名称分别为Neighbours和New State。

GL07

然后在Neighbours工作表中,选择条件格式中的清除规则,清除整个工作表的规则,同时把表格的单元格格式改为通用格式,即重新显示0和1。

GL08}

然后在Neighbours工作表中,选中20*20表格范围的左上角第一个单元格,输入=SUM('Current State'!A1:C3)-'Current State'!B2,即计算该单元格对应的Current State工作表中的单元格周围的数值总和,同时减去自身的值,即计算了周围8个单元格的值的和。然后将该公式智能应用到所有20*20的单元格内(拖拽)。

GL09

GL10

接下来,在New State工作表中,同样选中表格范围中的左上角的第一个表格,输入=IF('Current State'!B2=1,IF(OR(Neighbours!B2=2,Neighbours!B2=3),1,0),IF(Neighbours!B2=3,1,0))

该语句的含义如下表所示

  对应Current State表中的值为1 对应Current State表中的值为0
对应Neighbours表中的值为2 值为1,即存活 值为0,即死亡
对应Neighbours表中的值为3 值为1,即存活 值为1,即存活
对应Neighbours表中的值为其它 值为0,即死亡 值为0,即死亡

或者如下所示

对应Current State表中的值为1:

  • 如果对应Neighbours表中的值为2或3:
    • 值为1,即存活
  • 否则:
    • 值为0,即死亡

否则:

  • 如果对应Neighbours表中的值为3:
    • 值为1,即存活
  • 否则:
    • 值为0,即死亡

GL11

把该公式扩展到所有20*20的表格(拖拽)。如下所示

GL12

生命已完成了第一个周期!

接下来只需要把New State工作表中的表格复制,然后回到Current State工作表中,以的方式覆盖粘贴原表格,注意,粘贴方式一定选择第二项,只粘贴值!

GL13

此时啥也不要动,只需要继续按F4就可以重复刚才的复制粘贴操作了!

生命游戏一个周期一个周期地运行起来了!

GL14

理论上说它总会遇到一个不变周期,或者循环周期,或者跑到边界外去了。

总之,可以继续扩大表格范围(当然还是拖拽),甚至可以改写规则!

Do Enjoy Yourself!

Search

    Table of Contents