生命游戏
第一章 · 早期的生命

一条规则、几个格子,怎么长出一台无限运转的机器。

全章 41 个图样,每一个都可以直接在页面里运行、单步、缩放。

0先把规则说清楚

生命游戏没有玩家。你在一张无限大的方格纸上涂几个格子,剩下的事情全部由一条规则决定。每个格子有八个邻居(上下左右加四个斜角),下一代由每个格子当前有几个活着的邻居算出来:

一个死格子,如果恰好有 3 个活邻居,下一代就活过来;一个活格子,如果有 2 个或 3 个活邻居,下一代继续活着,否则死掉。

这条规则通常写成 B3/S23B 是 born(出生),S 是 survive(存活),后面的数字是所需的活邻居个数。整条规则只有这么多。

关键在于所有格子同时更新。算下一代时读到的全是当前这一代的状态,不存在先算左边再算右边的次序问题。下面这个例子最能说明:一条四格长的横线,两端因为邻居太少而死,中间两格活下来,同时上下各有位置凑够 3 个邻居而诞生新细胞,几步之后定格成一个叫“蜂巢”的小方块。

下面每个窗口默认都是暂停的:点速度按钮开始跑,单步一次走一代,重置回到初始状态。场地放大 / 缩小改变的是格子的行列数,也就是这块地本身有多大——画面里画出来的就是全部,边界之外没有隐藏空间,跑出去的东西会撞在边框上。看长时间演化(玛土撒拉、枪、开关引擎)之前,记得先把场地放大几次。

图 1.2 · 四个细胞排成一行 — 两端因邻居不足而死,上下各诞生新细胞,几步后定格成一个蜂巢。

1.1三条路,先走最笨的那条

要在生命游戏里造出行为有趣的东西,一共只有三条路:写程序去搜把已知的零件拼起来撒一把随机垃圾看能长出什么

第一条路要花不少力气,而且你得先知道自己在找什么;第二条路更是无从谈起——手上一个零件都没有,拼什么?所以只剩下第三条,也是最不动脑子的一条:随手撒,然后等它烧完,看灰烬里剩下什么。

这不只是教学上的权宜之计,也是历史的真实走法。生命游戏头一两年里被发现的图样,绝大多数就是这么撞出来的。这类随机的初始图样有个专门的叫法——(soup),而它安定之后留下的东西叫灰烬(ash),取的是“烧完之后剩下的”这个意思。

下面第一锅汤跑 116 代就安定了,灰烬里已经能看到蜂巢、几个别的静物、一个会转的小东西,还有一架自己飞走的小玩意。

图 1.4 · 一锅随机汤 — 随手撒的一把活细胞,116 代后安定下来,留下几种静物、一个闪灯和一架滑翔机。

那么换一锅汤会怎样?这里要小心一个很容易产生的错觉。下面这个图样并不是另外随手撒的一把,它就是上面那锅汤,只把其中一个活细胞改成了死的

结果是:安定时间从 116 代变成 2901 代,最终灰烬的活细胞数是原来的二十多倍,而且冒出了池塘、舰、面包三种上一锅里根本没有的静物。改一个格子,整场演化就面目全非。这就是这个系统“混沌”的确切含义——不是“看起来很乱”,而是对初始条件的极端敏感。

图 1.5 · 只改动了一个细胞 — 把上面那锅汤里的一个活细胞改成死的,演化时长变成 2901 代,灰烬规模是原来的二十多倍,还多出池塘、舰、面包三种新静物。

1.1b灰烬里的三类居民

多烧几锅汤,把剩下的东西分类,会发现它们干净地落进三个筐。

静物每一代都和上一代一模一样。方块、盆、船、舰、蜂巢、面包、池塘都属于这类,是灰烬里最常见的成分。

振荡器在有限多个形态之间循环,转一圈所需的代数叫它的周期,中途经过的每个形态叫一个相位。闪灯是最常见的一个,周期 2。脉冲星周期 3,块头不小却经常自然出现。十五格棒的周期高达 15,而且它在一个周期里会明显地胀缩变形——这个特性后面会变得很有用。

飞船转一圈之后变回自己的形状,但位置挪了。滑翔机沿对角线走;轻量级飞船每 4 代正交前进 2 格,所以速度记作 c/2。这里的 c 是生命游戏的“光速”:信息每代最多传播一格,因为一个格子只能影响到它的八个邻居,任何东西都不可能比这更快。

值得一提的是,几十年的大规模搜索至今只在自然灰烬里见过四种飞船——滑翔机和轻、中、重三型。飞船是三类居民里最稀有的。

图 1.6 · 灰烬里的九位常客 — 七个静物(方块、盆、船、舰、蜂巢、面包、池塘),一个振荡器(闪灯),一架飞船(滑翔机)。
图 1.7 · 脉冲星 — 周期 3。以它的体型而言,出现在随机灰烬里的频率高得反常。 LifeWiki ↗
图 1.8 · 四个振荡器 — 蟾蜍、灯塔、时钟都是周期 2;最右边的十五格棒周期 15,而且会在一个周期里胀缩变形。
图 1.9 · 轻量级飞船 — 周期 4,每 4 代正交方向前进 2 格。 LifeWiki ↗
图 1.10 · 轻、中、重三型飞船 — 三者周期都是 4,速度也完全相同。

1.2常见的爆炸:不看结局,看过程

光看安定后的灰烬,能学到的东西有限。换个角度:盯住演化过程中反复出现的那些不稳定的东西。它们才是推动整场演化的引擎。

最典型的是 T 型四联骨牌,四个格子,9 代之后炸成四个闪灯围成的“红绿灯”。随机汤的灰烬里闪灯常常成组出现,原因就是这个反应太常见了。

T 型四联骨牌还顺带演示了一件很漂亮的事:对称性会自己长出来,而且一旦长出来就再也回不去。它一开始只有左右对称,三代之后多出上下对称,再走一代连对角线对称都有了。因为规则本身不区分方向,已经形成的对称永远不可能被打破——这也解释了为什么生命游戏里那么多重要图样都是对称的。

类似的还有几个:前蜂巢农场17 代摊开成四个蜂巢;阶梯六联骨牌63 代安定成四个方块(这段冗长的演化和它中途的各种形态被统称为“烂泥块”);π 型七联骨牌则最有意思——它 30 代能前进 9 格,可惜拖在身后的残骸会挡死它。这个“能走但会被自己的垃圾害死”的模式,后面会反复出现,而解决办法也总是同一个。

图 1.11 · T 型四联骨牌 — 9 代之后炸成四个闪灯围成的“红绿灯”。随机汤里的闪灯常常成组出现,就是这个反应造成的。
图 1.12 · 前蜂巢农场 — 17 代之后摊开成四个蜂巢围成的“蜂巢农场”。
图 1.13 · 阶梯六联骨牌 — 63 代之后安定成四个方块组成的“路障”。这段演化以及中途的各种形态被统称为“烂泥块”。 LifeWiki ↗
图 1.14 · π 型七联骨牌 — 30 代前进 9 格,但拖在身后的残骸会挡住它,使它无法再前进一轮。 LifeWiki ↗

1.3蜂后:把崩溃接住,造出第一台机器

蜂后是个半成品:它每 15 代把自己反射一次,同时在原地留下一个蜂巢。反射两次、也就是 30 代之后,它回到出发点,两侧各多了一个蜂巢——然后它就撞上自己造的蜂巢,炸了。

接下来是本章、也是整本书最核心的一招:既然它总是以同样的方式崩溃,那就在崩溃的地方摆个东西把崩溃接住。方块正好能干这个活——把方块贴着蜂巢放,7 代之内蜂巢被吃掉,方块自己毫发无损。

把这两个反应拼起来:蜂后向右造一个蜂巢并被反射向左,方块吃掉它;蜂后向左再造一个并被反射向右,另一个方块吃掉它;然后从头再来。于是得到一个周期 30的振荡器,叫蜂后穿梭机。

这是本章第一个造出来的而非捡到的东西。区别很重要:前面所有图样都是从随机汤里捞出来的,而这一个是把两个观察到的反应有意识地拼在一起得到的。本书剩下的十一章,走的全是这条路——把简单反应拼成复杂零件,再把复杂零件拼成更复杂的东西,如此叠加上去。

图 1.15 · 蜂后 — 每 15 代把自己反射一次,同时在原地留下一个蜂巢。30 代后回到出发位置,两侧各多一个蜂巢——紧接着它就撞上自己造的蜂巢,炸掉。 LifeWiki ↗
图 1.16 · 方块吃蜂巢 — 把方块摆在蜂巢旁边,7 代之内蜂巢被吃掉,而方块毫发无损。
图 1.17 · 蜂后穿梭机 — 把上面两个反应拼起来,得到周期 30 的振荡器。这是本章第一个“造出来”而非“捡到”的东西。 LifeWiki ↗

1.3b第一把枪,和康威的五十美元

1970 年,康威悬赏 50 美元征集一个能让活细胞数无限增长的图样。当时这是个真正的未解问题:已知图样要么安定,要么就那么大点。

Bill Gosper 在 1970 年 11 月赢走了这笔钱,而答案就藏在蜂后里。把两个蜂后面对面精确摆好、时机掐准,它们会互相弹开,而且这一次碰撞的产物不再是蜂巢,而是一架滑翔机。再在两个蜂后的外侧各放上稳定用的方块,整台机器就完工了。

它本体周期 30、大小不变,却源源不断地把滑翔机送向远方,活细胞总数因此永远涨下去。这就是 Gosper 滑翔机枪——**第一个无限增长图样,也是第一把枪**。“枪”在生命游戏里有确切含义:本体周期性地回到原样,同时不断吐出飞船

它的意义远不止赢一笔奖金。有了枪就有了可以持续发送的信号,而有了信号,才谈得上在这个棋盘上造逻辑门、造计算机。后面几章会大量用到它。

图 1.18 · Gosper 滑翔机枪 — 两个蜂后精确对撞,碰撞产物不再是蜂巢而是一架滑翔机,外侧各用方块稳住。周期 30,滑翔机流永不停止。 LifeWiki ↗

1.4双蜂:同一套路再来一遍

B 型七联骨牌是灰烬里的常客,行为和 π 型七联骨牌很像:10 代前进 5 格,颇有飞船的架势,然后被自己拖出的垃圾杀死。

要稳定它比稳定蜂后麻烦些,好在大自然帮了一半忙:B 型七联骨牌偶尔会成对出现,这种组合叫双蜂。成对之后它们活得更久,而且和蜂后一样会把自己反射——不过周期是 23 代而不是 15。区别在于双蜂撑不到第二次反射,留下的烂摊子会先把它炸掉。

照抄蜂后那一招:摆两个方块把残骸吃掉(5 代清干净),左右各来一次,23 + 23 = 46,得到周期 46 的双蜂穿梭机。再照抄一次 Gosper 的思路,让两对双蜂对撞,就得到了周期 46 的双蜂枪。

为什么要费劲搞出第二套?因为周期不同。蜂后这条线只能给出周期 30 的东西,而很多后续构造需要别的周期,双蜂这条线正好补上。它是后来大量高周期枪的地基。

图 1.19 · B 型七联骨牌 — 10 代前进 5 格,行为很像飞船,但随即被自己拖出的垃圾杀死。 LifeWiki ↗
图 1.20 · 双蜂 — 两个 B 型七联骨牌凑成的组合,每 23 代反射一次并留下一摊残骸。和蜂后不同,它撑不到第二次反射。
图 1.21 · 两个方块吃掉双蜂的残渣 — 5 代清理干净,方块完好。
图 1.22 · 双蜂穿梭机 — 左右各反射一次共 23+23 代,得到周期 46 的振荡器。 LifeWiki ↗
图 1.23 · 双蜂枪 — 用两对双蜂对撞,照搬 Gosper 枪的思路,得到周期 46 的滑翔机枪。 LifeWiki ↗

1.5开关引擎:另一种无限增长

枪靠不断发射飞船实现无限增长。还有一条完全不同的路:让一个东西一边爬一边沿途铺垃圾

开关引擎就是这样的东西,只有八个活细胞。和蜂后、双蜂一样,它会留下残骸并在之后重现(48 代一次);但关键差别是它不回原位——每重现一次它就离出发点更远,行为上更接近一艘飞船。

单独一台仍然会被自己的垃圾毁掉。但只要把两台摆在合适的相对位置,或者给它配上恰当的尾巴,它就能一路爬下去,身后留下一串方块,或者不断甩出滑翔机。由两台开关引擎互相稳定构成的经典组合,叫做方舟

它有个特别的地方值得记一笔:开关引擎小到可以从随机汤里自然冒出来。这意味着即使没有任何人设计,无限增长在一锅乱麻里也是可能自发发生的。

图 1.24 · 开关引擎 — 八个活细胞。48 代后它在别处以另一个朝向重现——和蜂后、双蜂不同,它不回原位,而是一路远离出发点。 LifeWiki ↗
图 1.25 · 产块开关引擎 — 稳定之后一路爬行一路铺下方块,活细胞数无限增长。
图 1.26 · 产滑翔机开关引擎 — 另一种稳定方式,一边爬行一边不断放出滑翔机。
图 1.27 · 方舟 — 两台开关引擎互相稳定,构成的经典无限增长结构。

1.6玛土撒拉:极小的种子,极长的一生

还有一类图样既不无限增长,也不很快安定,而是用极少的细胞撑出极长的寿命。它们叫玛土撒拉,名字来自圣经里那位活了九百多岁的老人。

最著名的是 R 型五联骨牌:五个细胞,折腾 1103 代才安定,途中甩出六架滑翔机,最后留下 116 个细胞。五个格子引出上千代的演化,这是“简单规则产生复杂行为”最直观的证据。

放宽到十几个细胞,寿命会爆炸式增长:有的能撑五万代,有的跑掉七十多万代。这类图样很占地方——它们会摊得很开,还会往外甩滑翔机,所以观察之前先把场地放大几次,否则东西一撞到边框就没了。

图 1.28 · R 型五联骨牌 — 五个细胞,1103 代才安定,途中甩出六架滑翔机,最终留下 116 个细胞。 LifeWiki ↗
图 1.29 · 寿命 52514 代的玛土撒拉 — 起始图样装得进 16×16 的方框。 LifeWiki ↗
图 1.30 · 寿命 736692 代的图样 — 十六个细胞,跑掉七十多万代。

1.7反过来问:这一代是从哪来的

前面所有问题都是“给定现在,未来如何”。规则是确定的,未来只有一个。反过来问就完全不同了:给定现在,上一代可能是什么?

第一个答案是不唯一。同一个方块可以由许多种不同的上一代产生,所以生命游戏不可逆——你没法从当前画面倒推出唯一的历史。

第二个答案更有意思:有些图样根本没有上一代。它们只能作为第 0 代被人手动摆出来,永远不可能在任何演化过程中出现。这类图样叫伊甸园

它们必然存在,而且证明很简洁

直觉一句话就够:方块这类图样的父辈太多了,父辈不够分。

严格版本是个计数论证。取一块 $6n \times 6n$ 的区域,注意下一代中央那块 $(6n-2) \times (6n-2)$ 的内容只由这块区域决定(信息一代最多传一格)。中央区域能填出 $2^{(6n-2)^2}$ 种不同图样,这是“需求”。

再算“供给”:把 $6n \times 6n$ 切成 $n^2$ 个 $6 \times 6$ 的瓦片,每个瓦片本来有 $2^{36}$ 种可能。关键的一步是:存在两个 $6\times6$ 瓦片,一个中心放方块、一个中心放预方块,它们无论周围摆什么都演化成完全相同的结果。既然可以互换而不影响任何事,枚举下一代时瓦片就只需要算 $2^{36}-1$ 种,于是下一代最多只有 $(2^{36}-1)^{n^2}$ 种。

剩下的是比大小:只要 $(2^{36}-1)^{n^2} < 2^{(6n-2)^2}$,供给就覆盖不了需求,必然有图样没有父辈。两边开 $n^2$ 次方,化成 $2^{36}-1 < 2^{(6-2/n)^2}$,$n$ 足够大时右边任意接近 $2^{36}$,成立。

那个减一,看着微不足道,其实是全部

这里值得停一下。如果没有那个 $-1$,供给就是 $(2^{36})^{n^2} = 2^{36n^2}$,而需求是 $2^{36n^2-24n+4}$,供给比需求大了 $2^{24n-4}$ 倍——不是勉强够用,是指数级碾压,鸽笼原理根本无从谈起。那个顺差的来源很直观:中央区域每边窄了 2 格,少掉的一圈边框正好 $24n-4$ 个格子,边界效应天生站在供给这一边

而 $\log_2(2^{36}-1)$ 只比 36 小了大约 $2.1 \times 10^{-11}$,小得离谱。但它乘的是 $n^2$,而边界顺差只有 $n$ 的量级。于是胜负条件变成 $\epsilon n^2 > 24n-4$:左边二次、右边一次,二次项终将碾压一次项。解出来临界值在 $n \approx 1.14 \times 10^{12}$,这正是前面说的那个 $10^{12}$ 量级的由来。

所以整个证明其实是两个增长阶数的赛跑:边界效应帮供给,规模 $O(n)$;信息丢失帮需求,因为每个瓦片都损失一次而瓦片有 $n^2$ 个,规模 $O(n^2)$。把区域放大,后者必胜。这也让“信息丢失是本质条件”变得很具体——若连一对等价瓦片都找不到,$\epsilon$ 就是 0,不等式永远不成立,证明彻底失效。

这个论证有个漂亮的推广性:它对任何存在“两个不同的有限图样演化到同一结果”的元胞自动机都成立。方块和预方块只是最好写的一对,换成别的也行——比如一个孤零零的活细胞和一张空棋盘,两者一步之后都变成空棋盘。

但证明不告诉你它长什么样

这个证明是非构造性的。它保证足够大的区域里一定有伊甸园,可是让不等式成立的最小 $n$ 大约在 $10^{12}$ 量级,而且它也不告诉你该往哪儿找。

真正造出一个,用的是另一套办法,而且这套办法是人想出来的、可以一步步讲清楚的一次加一个格子,每次都选让父辈数量更少的那个状态。

从一个格子开始。它周围 $3\times3$ 的 512 种配置里,372 种让中心变死、140 种让中心变活——那就选“活”,因为父辈更少。第二个格子挨着放,在保证第一个格子为活的 1120 种配置里,703 种让它死、417 种让它活——还是选“活”。然后沿顺时针螺旋一路往外,每加一格都这么二选一。

这个过程一开始完全不像会成功:前 40 个格子全被选成活的,父辈数量反而暴涨到四百多万。但继续下去,父辈数开始塌缩,到第 266 个格子时归零,伊甸园就造出来了。

孤儿,以及“最小”能到多小

顺着这条线还能定义一个更强的东西:孤儿(orphan,这个词是康威起的)。孤儿是指无论周围填什么都仍然没有父辈的图样。含有孤儿的图样必然是伊甸园,而反过来也成立——每个伊甸园都含有一个孤儿。上面那个存在性证明,实际证出来的正是孤儿。

接下来自然要问最小能到多小。目前的记录按三种口径各有一个保持者(活细胞数、孤儿大小、边界框面积),列在下面。这些记录的“确实是孤儿”这件事,是靠专门的计算机程序核验的,不是纸上推的。

图 1.32 · 方块的众多父辈 — 同一个方块可以由许多种不同的上一代产生——这正是生命游戏不可逆的原因。
图 1.34 · 切成 6×6 瓦片的图样 — 定理证明中的示意图:图中所有中心是方块的瓦片(青色框出)都可以换成中心是预方块的瓦片,而整个 24×24 图样的演化完全不变。
图 1.35 · 一座伊甸园 — 逐格贪心构造的产物,225 个活细胞加 41 个死细胞(浅灰格子填什么都无所谓)。没有任何图样能演化成它。
图 1.36(a) · 最小已知伊甸园(按活细胞数) — 活细胞数最少的记录保持者。
图 1.36(b) · 最小已知伊甸园(按孤儿大小) — 所含孤儿最小的记录保持者。
图 1.36(c) · 最小已知伊甸园(按边界框) — 边界框面积最小的记录保持者,96 = 8×12。

下界这边,人类扳回一城

另一个方向是问:孤儿最小不可能到多小。这边既有机器结果也有人类证明。穷举搜索确认了 $6\times7$ 的框内不存在孤儿;而高度为 1 的伊甸园不存在,是可以手写证明的,同样的技术还能推到高度 2 和 3。

另一边,高度 5 的孤儿确实存在(2016 年找到)。于是中间留下一个干净利落的缺口:高度恰好为 4 的孤儿存不存在,至今没有答案。

再往前一步:没有祖父母的图样

既然可以问“有没有父辈”,自然可以接着问:有没有图样,它有父辈,但它的父辈全都没有父辈?康威在 1972 年 10 月提了这个问题,一直悬了四十多年,直到 2016 年 5 月才被论坛上一位用户解决。造它用的还是同一套贪心思路,只不过每次要让“祖父辈更少”。

同一个月里,“有祖父母但没有曾祖父母”的图样也被找到了。而这条线在 2022 年 1 月被彻底走完:有人证明了对每一个 $n$,都存在恰好往上数 $n$ 代有祖先、再往上一代就断掉的图样

图 1.37 · 一行厚的边框 — 构造扁平伊甸园时用到的辅助结构。
图 1.40 · 演化成一行厚图样的例子 — 上一代可以很胖,下一代却只有一行。
图 1.41 · 高度只有 5 的孤儿 — 装进 5×45 的方框。高度 1、2、3 已被证明不存在孤儿,高度 4 至今没有答案。
图 1.42 · 没有祖父母的图样 — 它有父母,但它的父母全都没有父母。Conway 在 1972 年提的问题,2016 年才被解决。
图 1.43 · 上面那个图样的父母 — 这一代存在,再往前就断了。

1.8这些东西当年是怎么被找到的

1969 到 1970 年,康威和他在剑桥的合作者、以及 Bill Gosper 在 MIT 带的一个小组,各自研究着这个游戏。真正让它进入大众视野的是 1970 年 10 月 Martin Gardner 在《科学美国人》上的那篇专栏。爱好者们把自己的发现寄给 Gardner,他转给康威,反响之大迫使他在 1971 年 2 月又写了一篇续篇。

靠一个专栏作家当所有发现的总管显然撑不住。于是 1971 年 3 月,一份叫 Lifeline 的季刊创刊了,由 Robert Wainwright 编辑发行,一共出了 11 期,到 1973 年 9 月停刊。本章里的双蜂枪、开关引擎(连同它的产块和产滑翔机变体)、以及橡实这个玛土撒拉,都是在这份通讯上首次公布的。

此后几十年的接力是:1974 到 2009 年主要靠私人邮件列表流传,1990 年代出现了一批个人网页收藏,2004 年有了专门发布新发现的 LifeNews 网站,2009 年之后重心转到了 conwaylife.com 的论坛,至今如此。

当年是拿棋子在纸上推的

有一件事今天很难想象:1970 年既没有现成的生命游戏软件,算力也贵得离谱,所以早期爱好者大量是用方格纸、跳棋子、或者围棋的棋盘和棋子手工推演的。

正因为手工推演极其昂贵,当年的做法反而比现在更系统:不是撒大片随机图样,而是把所有小图样按格子数穷举一遍,挨个跑。本章里 T 型四联骨牌、R 型五联骨牌、B 型七联骨牌、阶梯六联骨牌之所以全都有名字、全都被研究透,正是这套穷举的产物。开关引擎也是这么被发现的——Charles Corderman 当时在穷举九联骨牌,其中一个两代之后就变成了开关引擎。

顺带一提,“多联骨牌”这个概念是 Solomon Golomb 在 1953 年提出的,Gardner 写它比写生命游戏早了整整十年。数学圈对多联骨牌的长期兴趣,正是这些小图样一开始就被仔细编目的原因之一。

图 1.46(a) · 一个九联骨牌 — Corderman 当年穷举九联骨牌时,发现这个东西两代之后就变成了开关引擎。
图 1.46(b) · 开关引擎 — 上面那个九联骨牌两代之后的样子。 LifeWiki ↗

后来这件事被彻底工业化了

“撒汤看灰烬”这个最笨的办法从未被淘汰,只是被自动化到了另一个数量级。1994 年 Achim Flammenkamp 跑了第一次自动汤搜索,累计了 $5 \times 10^9$ 个灰烬物体,从中找出 48 种不同的振荡器;2004 年他再跑一次,量级提高十倍,找出三千五百多种静物和八十多种振荡器。

2003 年 Andrzej Okrasinski 干脆把它做成了屏幕保护程序,五年里编目了 $4.7 \times 10^{11}$ 个灰烬物体,静物超过八千种、振荡器约一百八十种——但飞船依然只有那四种。2009 年出现了分布式的在线搜索,2014 年 Adam P. Goucher 的 apgsearch 上线,速度快到把此前所有搜索加起来的成果又乘了大约一万倍,至今仍在跑。

这条线索本身就说明了一件事:随机搜索能高效地穷尽“常见”的东西,但那四种飞船的天花板几十年没被撞破。真正稀有的结构不会自己掉进汤里,只能靠后面十一章那种一层层拼装的办法造出来。