游戏康威生命游戏是如何搭建计算机的?( 四 )


p5760单元细胞具备里程碑意义 , 但实际使用时存在很多困难 。 首先 , p5760的死亡或存活状态很难辨识 。 我们必须每隔5760次迭代就检查一下单元细胞左上角两个特别小的船形标志中间 , 是否正好有一个滑翔机飞过 。 有 , 代表单元细胞存活 。 无 , 代表单元细胞死亡 。 其次 , p5760只支持原生的康威生命游戏规则 , 无法自定义规则 。
经过数年的技术探索 , 2005年 , Brice Due终于设计出上帝级别的单元细胞——OTCA metapixel!
我们先在下图中直观感受一下这个边界大小为2058x2058的单元细胞长什么样(图中 , 左边是OTCA metapixel死亡时的样子 , 右边是存活时的样子):
游戏康威生命游戏是如何搭建计算机的?
图片

每个死亡(off)状态的单元细胞共包含23920个微观尺度的存活细胞 。 每个存活(on)状态的单元细胞通过射向中央的一组射线 , 将整个单元细胞的宏观结构 “染”色 。 于是 , OTCA metapixel的死亡和存活状态在宏观尺度上一目了然 , 与康威生命游戏的微观结构一致 。
我们放大一些 , 看看OTCA metapixel的左下角藏有什么好东西:
这里竟藏有一个可以配置单元细胞规则的控制面板!OTCA metapixel支持基于邻接计数的各种生命规则 。 控制面板上 , 字母B对应0~8共9个开关 , 字母S也对应 0~8共9个开关 。 这些开关是什么意思呢?
原生的康威生命游戏主要由两条规则构建:一 , 死亡细胞周围有3个存活细胞时就诞生为新细胞;二 , 存活细胞周围有2或3个存活细胞时就保持存活 , 否则死亡 。 这两条规则可以简记为B3/S23(其中 , B代表出生 , S代表存活) 。 通过修改B或S后面的数字 , 就可以创建出不同的生命游戏 。 例如 , 把B1、B2、S3这三个开关打开 , 我们就创建了规则B12/S3 , 这意味着:死亡细胞周围有1或2个存活细胞时才诞生为新细胞 , 而存活细胞周围有3个存活细胞时才保持存活 。
使用OTCA metapixel时 , 我们可以通过小尾巴形状的图形开关(开和关的状态在微观结构上只相差一个细胞)设置好具体规则 , 然后把一组OTCA metapixel单元细胞平铺成矩阵样的网格 。 实际运行时 , 每个单元细胞会自动检查周围8个邻接单元细胞的死亡或存活状态 , 然后根据规则开关的设定来决定自己是生是死 。
听上去很厉害的样子!感觉每个OTCA metapixel单元细胞都是一个可配置的小型自动机 。 那么 , 实际运行时每个OTCA metapixel单元细胞到底是如何检查邻接单元细胞的状态 , 又是如何根据自己的配置开关完成状态切换的呢?我给OTCA metapixel的主要功能区域加了一些注释:
游戏康威生命游戏是如何搭建计算机的?
图片

OTCA metapixel周边有8个输入输出用的I/O接口 。 通过这些接口 , 单元细胞用滑翔机做消息 , 将自己的状态通知给8个邻接单元细胞 。 同时 , 单元细胞也接收8个邻接单元细胞的状态更新 。 左侧规则控制面板旁边 , 有一个纵向的消息信道 。 这其实是一个小型的 , 带同步功能的指令分发器和接收器 。 围绕OTCA metapixel一圈的 , 是一条空旷的正方形轨道 。 单元细胞运行时 , 如果注意观察 , 可以看到一列由9个轻量级滑翔机(LWSS)组成的小火车呼啸着沿轨道绕行一周 。 小火车的作用是依次查询8个I/O接口 , 看每个邻接单元细胞是否存活 , 并将邻接细胞的计数与控制面板上预先设置的条件相比对 , 以激活后续指令 。 OTCA metapixel上边框和右边框内侧 , 像曲尺形状的结构是用于显示状态的射线枪阵列 。 一旦接受到激活指令 , 射线枪阵列就从两个方向连续发射枪弹 , 将单元细胞铺满 。
OTCA metapixel实际上将康威生命游戏原本的单位尺度 , 从1x1的微观细胞 , 放大到了2058x2058的宏观单元细胞 , 同时还支持游戏规则的灵活定义 。 在二维平面平铺开来的OTCA metapixel单元细胞矩阵 , 运行起来后 , 就是一个宏观层面的生命游戏 。 这的确是生命游戏中的生命游戏!


推荐阅读