2026-07-10 11:16:55
我在 2024 年底左脚大拇指根部曾肿痛一周 ,结合多年体检高尿酸结果,怀疑是痛风。但后来没有什么症状,身体也一直很好,就没去医院看。
最近一年多一直通过跑步降低体重 ,减少了 9~10kg 体重。攀岩保持在一周两到三次。自己在家查血尿酸,一直在 500~600 之间,偶尔在 480 左右。虽然戒掉了含糖饮料,也无饮酒,作息规律,精神放松(不用工作了)。但尿酸一直降不下来。
上周去岩馆爬高墙。休息时岩友帮我按摩了手臂和肩背放松肌肉。可能和这有一点关系,我一周来手柄肘关节处和肩膀都有些酸疼。类似平常攀岩后乳酸堆积的那种感觉。但和之前不同,一般这种酸疼不会超过 24 小时,但这次恢复得特别慢,一周过后依然没有完全好。
和 Gemini 讨论了一番,高度怀疑是痛风导致。结合我的手指关节也总有刺疼,恢复也比一般岩友慢,似乎也不完全是运动造成的正常损伤。Gemini 建议我去医院做个检查。
昨天挂了今天早上的风湿免疫科的专家号,一大早就去做了检查。除了验血,另外给左手肘部做了彩超。主要看看酸痛是运动损伤还是高尿酸导致的。
结果不出意料,果然是左侧肘关节软骨面“双轨”征。医生说这的确高尿酸引发的无菌性炎症,可以起到决定性诊断意义。血尿酸 496 , 其它指标均正常。(其中血脂略微偏高,但应该是吃早餐引起的,理论上我应该空腹验血)
医生开了两盒非布司他片,先吃一个月再复诊。目标是先将尿酸降到 300 以下。
ps. 今天出门步行去医院,面诊、检查、等结果、开药,然后步行回家,一共花了三个小时。还是挺高效率的。
2026-07-09 16:32:46
今年花了很多时间给云豆补习英语。
他今年小学毕业了,我意识到他在英语学习方面遇到了障碍需要额外介入,是在今年过年期间。云豆在很小的时候,直到三岁还不太会说话。长点的句子都说不下来,但是英文字母认得却很快,似乎对英文有点兴趣,就给他报了个英语兴趣班,一周上两小时的课。但很快就遇到了疫情,几乎都在上无效网课,也就停了。从三年级开始,我督促他在多邻国上每日打卡。有一段时间他特别着迷于在多邻国上冲击钻石等级,每天甚至能刷上近两小时的积分。要说多邻国上学英文到底有没有用,我也说不上来,不过至少能培养一点基本的语感,看见单词即使不认识也能读出来。去查字典时,也不需要反复查看拼写,见过一眼的生词背过去在键盘上能一次输入正确。光这点,比我小时候学英文强。
他在五年级之前,学校英文课的成绩还不错。但考试分数从五年级开始就快速下降(从九十多分下降到八十多分),高年级换了英语老师,家长会上能感觉到新的英语老师把他归为成绩不是很好的学生。我问过他为什么成绩下降,也检查过他每次考试的试卷,他归纳为英语“语法”太难了。我意识到,对他来说,光靠过去的积累的一点语感对继续学习英语是不够的。只有更系统的学习才有效率。况且,多邻国对他已经沦为一个积分游戏,他宁可花很多时间去已经熟悉的章节里刷分,也不愿意增加有效的练习强度。
当然,学习语言最好是有足够量的应用环境。但他不爱阅读(短期也不可能培养出足够的兴趣),也不喜欢看电影/动画片。每每他问起,为什么我们要学习英语,我是这样回答的:学习英语有两个主要的用途;英语是事实上的世界语,这个世界上大多数受过教育的人,或多或少都会说一点英语,我们和世界打交道,就用得上;这个世界上绝大多数知识是用英语记载的,翻译成中文的过程很容易曲解和丢失原本的意思,用英语学习知识很多时候都是必要的,而且效率更高。
我认为日常会话交流和用英语阅读理解表达是两个维度的能力。两方面固然都重要,不过限于目前的状况,还是一步步来。我选择先帮他补习读写能力。既然他自己意识到英语语法没学好,就系统学习以下基本语法。如果考试成绩上去了,对树立自信心也是颇有好处的。我选择的是《英语在用:剑桥初级英语语法》这本书做教材,由我自己来辅导。
为什么没有选择给他报课外班或请家教?我的想法是,我自己时间充足,英语的基础知识足够教学;我们的亲子关系融洽,他还没有逆反期的迹象,对我非常信任。最关键的是,我觉得第三方教学的评价反馈机制不足。让一个不相干的老师面对学习能力不足的学生,即使是一对一,让老师投入足够的感情和精力也是违背人性的,简单说就是,就是一份工作,“凭什么花那么多心思教”。如果是教自己的孩子,我的目的是让孩子真的学会学懂;第三方老师则必须有另一个客观的评价标准:背会多少单词、语法题的正确率、英语考试的成绩。而这些评价手段和“学会学懂”之间总会有偏差,偏差会造成学习精力的浪费。我还是希望孩子的童年尽可能轻松一点。
注:有朋友提醒过我,自己教(不限于英语)取代不了请家教,说以后我会明白的。不过暂时我还没有看到自己教娃的坏处。
从今年寒假开始,每天保证半小时的额外(不包括学习里的学习和家庭作业)英语学习时间。大致是 English in Use 的一页内容加上一页练习。坚持到暑假的今天,大约进行了 5 个月,全书 120 页的内容基本过了一遍,外加做了第二遍全书快速复习。最近一个月略有松懈,中间也会偶尔一两天中断,但基本维持了这么个学习状态。现在书后的练习题差不多也能有 90% 的正确率,我感觉他的确把这本书所讲的基础语法真的学明白了。
每天的学习过程大致以自学为主。也就是自己先仔细阅读一页内容。一开始孩子的自学能力几乎为零,必须严格在一旁督促他朗读书中的内容才读得下去,读完后合上书也无法陈述书中讲了什么。“阅读”本身就是一种能力。我很喜欢《如何阅读一本书》,但这本书云豆还看不懂,只能我自己慢慢引导阅读的方法:提取重点、预设问题、从文字中寻找答案,等等。所以,这本年不仅仅是学习英语,更是学习如何学习。云豆在这方面进展不大,但终归是有所进步。最近已经可以耐心把书看完了。我强调说,不要以找到题目的正确答案来看书,要理解书中传达的知识,他应该听进去一半吧。
不过,即使经过了半年,他依然无法完全自学,还需要在初中阶段坚持练习。这体现在书里每一页内容并不太多(成人五分钟的阅读量),他自己读完后,经我检查,大约会忽略一半以上的内容。他会不由自主的忽略一些自己不懂的东西,假装看完了;或是把陌生的知识当成自己已经学过的,相似却不同的部分;难以找到重点。这些都是需要有个人坐在旁边引导和确认的。
我的另外一个发现是:虽然学习了多年英语,他还是不认识大量的基本单词。所谓基本单词,我是以 Basic English 的 850 单词为标准。单词量的匮乏直接导致了理解英文句子的困难。我没有让他专门背单词。但是,每次有基本单词不认识,都让他自己查(电子)字典,搞清楚读音和意思。学会阅读字典、阅读国际音标,也是他过去缺乏的。在单词上总得有一些投入才能让大脑有适量的刺激:查字典的过程、朗读的过程、纸上抄写的过程都有必要。当然最好还是得有阅读量,目前在增加阅读量上我还没找到好的方法。毕竟中文阅读都不够,别说英文的了,慢慢来吧。
另一方面,是语言本身的表达能力。对于陌生的英语句子,云豆会有两种不解。一种就是直接看不懂,另一种是隐约知道句子的意思,但是无法用中文表达出来。前一种自然需要剖析句子,解释语法和词组的搭配;后一种其实在双语使用者里面偶尔也会卡住,毕竟中文和英文的表达确有不同,这涉及大脑的语言转换,并不是自然的过程。不过,我视为一种不错的语言表达能力练习。给云豆辅导时,我经常说,想想你平常是怎么说话的,把意思准确的用中文讲出来。英文和中文不是一个词一个词的对应关系,也不是调整语法的重组织,而是你要去理解背后的内在含义。怎么正确表达其实是对表达所用语言的使用能力。我不仅仅希望你英文水平提高,更希望你练习语言表达能力。或许对学习英语来说,基于翻译的学习方法不太好,但准确的用中文表达英文句子的意思也很重要。这无关英语学习,是一种必要的表达能力。在日常使用英文时,不必去想中文意思;但在课程学习上,我还是会加上每个句子的中文翻译练习,就当在练习语文了。
总的来说,我能察觉到孩子在英语学习上有所进展。但起到最大作用的是:坚持不懈的学习状态。每天哪怕只有几十分钟的投入,“不间断”本身起的作用更大。我认为这比每周集中一两次两小时以上的课程更有效率。固然能做到每天两小时以上可以学得更好,只是孩子(哪怕是自律的成人)难以做到罢了。
最近也试着给老二可可补习英文。她上三年级,英语基础更差。英语课本上的句子几乎全部无法顺利朗读。词汇量停留在幼儿园水平(她上的双语幼儿园)。这会是一个更长期的学习过程,计划先从每天半小时的英语朗读开始,先熟悉一百多个日常基础词汇再说吧。
2026-06-25 21:23:09
每个经典电子游戏的游戏设计都多少有一些之前作品的痕迹。我认为原因有二:成功的玩法必须有大量玩家实际游戏体验的打磨证明其有效,在经典玩法上培养出来的玩家习惯可以极大的减少游戏的学习门槛,一个新玩法如果门槛过高就无法吸引足够的玩家去玩,也就得不到打磨。
我一直想搞清楚一款吸引我的游戏的核心规则部分到底是怎么设计出来的。为什么我可以玩成百上千小时还可以发掘出新乐趣,而开发者在看似不算太长的时间就设计出了它们。当我这两年有足够的时间,我开始用一种慢方法弄清楚这点:玩一些更古老的游戏,找到它们和现代游戏之间的发展脉络。
Stellaris 群星是我游戏时间第二长的游戏(第一是 Factorio),我从 1.0 版就开始玩,并从 1.2 版开始维护它的中文翻译 mod ,断断续续玩了接近 900 小时。只是由于时间关系(玩其它游戏)最近两年的新版本还没有体验。
一开始玩这个游戏是因为 Paradox 在战略游戏上名声显赫,当时 P 社四萌众人皆知。我特别喜欢维多利亚 2 ,已在上面花了上百小时。我深知 P 社游戏如果不是一开始就跟着开发玩,游戏系统的复杂度就会像雪崩一样压下来,上手门槛会越来越高。跟住一款新品,乘它还不那么复杂的时候跟着游戏更新一点点学习体验会更好,更别说我对太空科幻题材情有独钟。所以我在 Stellaris 发售前就开始关注开发 log ,第一天就进入了游戏。
由于 P 社已有十字军之王、维多利亚、欧陆风云、钢铁雄心在前,我想当然的认为群星是他们招牌大战略类型游戏的科幻版延续。我在游戏系统里也发现了大量 P 社游戏中熟悉的东西:更加肯定了这个想法。招牌式即时带暂停玩法,靠战争点数和驱动的战争系统,相互堆叠的 Modifiers ,这些都太熟悉了。至于不一样的部分,我觉得是在一个新游戏项目上的创新尝试。虽然我短时间未能体验所有的游戏系统,作为一个新游戏老说还是太庞杂了,但通过翻译游戏文本,我还是深刻感受到这个游戏的设计量。即使去掉在 P 社其它大战略游戏中已有的系统,剩下不一样的“原创”部分还是相当多。而我作为一个萌新进入却能感觉到大多数游戏系统都玩起来那么自然。
Master of Orion 猎户座之王的重置版 Conquer the stars 是在 2016 年出上线的,比群星还早了几个月。但我一开始并没有关注它,玩到这个游戏已经是两年之后了。读高中时就从游戏杂志上听说了 MOO 和文明开创了 4X 游戏这一新类型,比我当时最喜欢的三国志系列更复杂更有趣。语言门槛阻止了当时的我。在最近 10 年我试着玩了很多过去曾经喜欢的老游戏,发现很难找回过去的感觉。老旧的低分辨率画面并不是主要障碍,但过时的交互设计会极大的降低游戏体验。很多细节在 20 年间已经被后续游戏打磨得很好了,如果只是想追求游戏乐趣,真的没有必要回头玩老游戏。所以,老游戏的现代重置版就是回顾游戏发展史最好的替代。我打开 MOO 重制版的动机就是想看看这个太空 4x 游戏的鼻祖当时到底创造了什么。
我在 MOO 中重新看到了群星中熟悉的那些东西:开局自定义的差异化种族,模块化舰船,对未知星系的调查,用星际航道互联的星图(区别于文明类的棋盘格)…… 当我真正完成了一盘 MOO 后,我在收官阶段又看到了熟悉的终局危机,这一度被我认为是群星最好的原创:在游戏结尾放上完全不对称的 NPC 天灾让玩家挑战它们,而不是和对称的 PC/NPC 进行冗长的拉锯战。玩 MOO 的开荒和收官体验是最好的,中间略有拖沓。游戏系统不复杂所以上手极快,中间帝国规模过大时遇到星球封锁时,微操工人分配有点麻烦,但终局又会回到紧张刺激的“再来一回合”心流。原来,群星是站在巨人的肩膀上的发展结果。
之后,我又浅尝了许多相关的新老游戏,似乎摸到了太空 4x 游戏的发展脉络。
文明是当今最著名 4x 类游戏,但实际上 4x (Explore, Expand, Exploit, Exterminate) 这个词是在 MOO 的商业宣传上首次出现的。MOO 虽然不是文明开发团队所创作,但同为 MicroProse 发行,它比文明初代略晚。MOO 二代则和文明 2 同年发售,早于后面的半人马 alpha 。MOO 中的星系航程限制,在重制版中被视觉化为势力投影,让星系间的联合产生了动态的国界线,我认为这启发了半人马 alpha 的国界设定(这在文明 2 中是没有的),而这到了文明 3 中被固化下来衍生出文明系列的政治疆域和文化疆域系统。半人马 alpha 中的模块化部队和差异性种族应该是受 MOO 的直接影响。
作为 4X 类游戏,文明和 MOO 的游戏流程有很多相似之处。一开始都是派部队出去侦察开图,探出周边资源后,选择合适的地点开拓新基地。然后在不同的基地发展人口,提升生产力,生产力可以换得发展优势和新的部队。当不同势力的部队相互接触时,会展开外交以及战争。最后(多半)通过战争政府世界。在这个过程中,玩家需要同时积累科技点推进科技树,解锁生产力科技和军事科技,提升发展效率。
但这两个系列在细节上也有明显不同之处。地图是最大的不同,文明是网格状的,地图由等大的四边形或六边形网格组成,地理原因靠格子数量决定。每个格子上都或多或少存在一些不同的资源,最后会被纳入附近的城市(基地)所有。MOO 类则是离散的, 1 和 2 代,星系散落在星图中,只由点和点的距离决定通路。改变星图拓扑关系的是星云,在星云中航行会极大的降低航速。对的,这个设定后来直接被继承到群星中。这种星图相对网格地图有体验上的巨大变化,但也存在一些问题(某些玩家觉得不是)。那就是建立战略防线极难。当玩家把航程科技极大升级后,可以轻易跳过对手前线的防区。所以从 MOO 3 代开始,就改成了预设星际航道的星图,这使得某些节点比其它节点有更重要的防守价值。同时,还增加了虫洞,可以把遥远的两个节点直接连接起来。这让星图的拓扑关系更为复杂。
但 MOO 3 并不成功,很多不成熟的新机制破坏了老玩家的体验。星路的改变算半个(很多老玩家不喜欢),它也影响了后来的大多数太空类 4x 游戏。2016 年的 MOO 重制版虽然骨架继承了 MOO 2 ,但在星路这边沿用的是 3 的固定航路规则。但为了尽可能还原 1 和 2 的体验,还加入了不稳定航路。在游戏初期解锁科技前,这些不稳定航路会阻断交通。大致相当于在前作中那些被距离隔断的节点(之前是用航程科技限制它们联通的)。
在星际航行方面,一定要提一下 Sword of the Stars 星际之剑这个系列。它有一个招牌设计是不同种族采取不同的 FTL 航行方案,多达 5 种以上。预设星际航路是其中一种,只靠星系间距离来自由跳跃也是一种,还有建设星门或虫洞进行远距跳跃的种族。群星的老玩家马上就会意识到,这就是群星 2.0 之前的设计,它完全照搬了星际之剑的异构 FTL 种的三种。即使是现代版本,虽然开局又统一成预设星路图,但也能找到高科技下的另两种 FTL 的痕迹。群星 2.0 之后换了制作人,曾经写过一篇开发日志谈论为什么把极具特色的异构 FTL 去掉:FTL 的多样性带来的混乱极大地限制了他们后续开发更有深度的内政、贸易、外交、银河议会等系统,同时方便制作后来加入的贸易路线、划分星区、宣战厌战等 P 社传统设计。
为什么星际之剑可以这么干?因为星际之剑是一款强调星际战争的游戏。内政运营方面是极端弱化的。它继承了 MOO1 的去微观管理化,每个星球用一个简单的滑条决定发展偏向性,而在 MOO2 和重制版中则演变成精确的工人放置系统,玩家需要精确的控制每个星球用几个小人作哪方面工作,科研还是种田还是工业。这个设计在群星中用 job 系统进行了进一步的发展。星际之间的主创团队深入参与过 Homeworld 家园系统的开发。家园是一款以 3d 太空战斗为卖点的 RTS 游戏,而星际之剑明显想作一个结合 4x 战略和太空战场战术体验的游戏。它作了相当复杂的战术模拟,激光、导弹、质量投掷器,不同的武器有不同的特点,在战术战场可以走位和战场上的障碍物来改变战局。在这里,群星的战斗系统中,又可以看到星际之剑的影子。
无论是猎户座之王还是星际之剑,它们都有着复杂的自定义舰船设计系统。这在后面变成了太空 4x 的标配:在一个有限空间内玩家可以自由搭配组件,让自己的舰船独具特色。群星也完整的继承了类似系统。文明系列的半人马 alpha 虽然和传统文明更相像一下,却在自定义战斗单位方面更接近这些太空 4x ,文明的后续版本却没有这个设计。
但是,MOO1 和 MOO2 在战术玩法上却有相当大的差异。MOO1 更像是重视数值的卡牌堆叠模式,MOO2 则需要玩家关注每艘舰船的朝向。武器和护盾甚至能指定前后左右。玩的时候需要个体微操,这个玩法成为了 MOO2 的招牌,为很多系列的老玩家津津乐道。到了 MOO3 又改成了战前布局,无法单个战舰微操。战场上变成了千军万马的观战体验而不是靠操作战术上击败对手。这也是 MOO3 被系列玩家诟病之处,但历史发展到今天已经说不清哪种对玩家体验更好,只能说有不同的玩家群罢了。星际之剑的初代晚于 MOO3 发售,或许是看到了这些差评,更多的应该是继承了家园的血脉,它在战术层面比 MOO2 更加细腻,而且从战术回合制转变为实时操控。而 MOO 2016 的重置版在继承了大部分 MOO2 骨架的基础上,战术玩法也改成了实时加暂停模式。这可谓顺应时代潮流,现代玩家恐怕再难适应一艘艘船单独操控了。但依旧有很多老玩家评论说不如 MOO2 的战术玩法好玩。因为它虽然保留了 MOO2 的单个舰船的方向设计,但却砍掉了单独原地转向这些机动能力,实时混战时很难操控。
MOO2 和星际之剑中都有极具特色的跳帮战。可以为舰船配备陆战单位,在太空战中直接登船抢夺敌舰(以及敌舰科技)。在后续的游戏中再难看到,MOO 2016 重置版中也砍掉了这个系统。
即使星际之剑的战术系统中有这么多 MOO2 的影子,但在仔细考证了一番后,我认为这两个游戏的战术玩法并没有明显的继承关系,它们却有个共同的源头,那就是桌游 starfire 。星际之剑尤甚,在自定义舰船方面更为接近。
Starfire 诞生的很早,在 1979 年就发行了第一版,风靡一时。和当时的桌面游戏一样,也有大量的文学衍生作品。不过它的流行年代比较久远,现在提到它的玩家就不多了。但这的确是一个有着很长生命周期的系列,直到 2012 年还发布了第六版规则。在 bgg 上有专门的 wiki 页面展示整个系列 。btw, starfire 的桌游官方设定是从 2200 前后开始的。星际之剑也把游戏设定在 2200 到 2400 年。至于群星玩家肯定对 2200 年这个设定非常熟悉。
Starfire 的核心战术规则是让玩家在纸上设计太空飞船,用一串字母表示每个模组,比如 S 表示护盾,L 表示激光,A 表示护甲,Q 表示剑桥和船员舱等等。当敌人命中你的飞船时,从左到右划掉对应字母,飞船的功能也随之受损,其推进力、转向机动力和攻击力也需要更新,非常直观。飞船在战斗时在一个六边形棋盘上进行,由于有护盾朝向和射击死角的设定,转向和走位都有很重要的战术意义。这套舰船设计和战斗机制深深的影响了星际之剑的战术系统,星际之剑比 MOO2 更接近这个桌游的配船系统。船头船身船尾的三段式设计,在战斗中可以分段破坏,几乎就是 starfire 桌游中逐步花掉功能字母的战术体验。
starfire 除了局部的战术对决,还包含了庞大的星际探索、技术研发和殖民地经济管理的战略战役。作为一个太空兵棋,在及其丰富的战略扩展中就设计了完全不同的种族 FTL 机制。异构 FTL 带来的非对称战略体验被星际之剑完美继承。btw, 当初我们的游戏《三国志战略版》立项之初,我正沉迷在群星 1.0 版本中,感叹于异构 FTL 在战略成面提供的奇妙体验。专门找三战主设计师聊了一下午,介绍这个系统。
Starfire 在长期战役中,科技研发具有相当的随机性,科技被分成几个类别,研发靠投骰。不同种族有随机的科技偏好,打扫战场和探索遗迹都有概率抽到随机科技。这些都能在后面的群星中看到影子。随机科技树也是 MOO 的招牌设定,和文明的固定科技树有着明显的对比。在 MOO 的诸多现代精神续作中也得到保留。
不管是星际之剑还是 MOO 以至于群星,都设定了中后期的银河灾难,这些设计灵感均来源于 starfire 的官方小说和剧本。
星际之剑(以及 MOO)采用的大地图回合制战略加实时战术对决架构也和 starfire 颇为相似。而电子游戏的优势就是借助计算机模拟,可以把原本在桌面上几周时间才能玩完的桌游战役以更快节奏展示给玩家。以往桌游上每天可能只能玩一场战术对决,现在在电脑上就只是半小时的战斗。
最对这一系列太空 4x 类游戏溯源的过程中,我不仅发现了 Starfire 这个桌游源头,还找到了另一款桌游 1975 年发行的 Stellar Conquest 。这个名字很多次的出现在这些电子游戏创作者的媒体访谈中。年代过早我自然是没有玩过,但我很好奇的下载阅读了它的说明书。原来,这才是太空 4x 的真正先驱。侦察舰/护卫舰/殖民船的设定,探索/殖民/建设前哨站/扩展/征服的概念都是这里提出的,甚至还包括在星云中减速的设定。殖民地上太空战过后再次用陆战队登陆战也如出一辙。最奇妙的是我在说明书上读到了将恒星分为蓝/白/黄/橙/红五类,玩家可以先看到恒星颜色就可以大略知道星系里会有什么,可以由此决定侦察的优先级。这个设定一直继承到了群星,但并没有在游戏内明显说明。如果没有玩过这同类游戏很容易忽略这点。但在 MOO 中,明确解释了黄色恒星周围存在宜居带行星的可能性更高。
太空 4x 和文明 4x 相比,有一个很大的不同点就是更难找到宜居的殖民地。不同种族的宜居星球类型也不相同,如果找不到合适宜居星,就会影响生产效率,通常需要开发类地化科技对星球改造。这一设计几乎贯穿所有太空类 4x 游戏。调查母星附近的星域,找到合适的殖民地几乎是这类游戏开局一致的操作。在 MOO1 中,在星图上发现一个恒星,就可以作为一个航行节点,并可以在上面开拓殖民地(如果允许);到 MOO2 后拓展了行星系统,同一星系可以有颗行星,还可能有小行星带等其它星体。星系结构更为复杂了。这个设定一直延续到后面多数同类游戏。最近几年有一款被称为 MOO2 的精神续作的商业游戏叫做 Interstellar space : Genesis 。我略玩了一下,感觉还不错。它在侦察星图方面又扩展了不少深度。每个星区都可以做不同程度的扫描,深度扫描可以发现更多星球,这样在对抗时就能更好的隐藏战略点:在通过深度扫描发现的星球上做基地,对敌人可能是不可见的。
前面提到了桌游 Starfire 对太空 4X 游戏的影响,这里就很值得提一下免费游戏 Aurora 4X 。这是一款免费的有着 20 年以上的免费游戏,至今(到 2026 年)仍然在继续开发。我了解到它是从读 Distant worlds 的攻略开始的,而 Distant worlds 被称为猎户座之王 3 事实上的精神续作。所以故事得从 MOO3 说起。
如果我们纵观 MOO 系列得发展历史,可以发现 MOO 的每一代都希望对前一代做出大的改变,而不是简单的打磨完善。btw, 这一点和文明系列颇为相像。文明的原创者席德·梅尔有一个注明的三分之一法则(Sid Meier's Rule of Thirds),大概是说,每代文明都保留 1/3 的传统系统,改进 1/3 ,引入 1/3 的新系统。MOO 系列在改变方面步子迈得更大。2 代除了上面提到得单星系多星球外,还改变得科技树,从发明概率(这是从 starfire 继承来的)改成了每级科技三选一互斥。初始种族的点数定制取代了 1 代的固定种族(这被继承到了群星中)。加入了终局 boss 。战术层面引入了极大的微操,战略层面也把滑条控制星球的偏向改成了工人分配的微操形式。
总的来说,MOO2 加入的新系统都颇受玩家欢迎,而玩法从宏观管理慢慢向微观管理转移也很成功。但到了 MOO3 ,设计者又想在宏观管理上发力,让玩家扮演帝王,而不必在微观上亲历亲为。只用做战略决策就够了。但它并不是简化内政系统,把原来需要微观操作的部分变成几个简单的数值,而是进一步的把系统微观化了,然后让 AI 通过自动化规则去运行它们。如果放在今天,这个理念倒是很现代的。Paradox 的几个著名系列都在往系统的复杂化方向走,并辅以自动化手段减轻玩家的决策强度。但 MOO3 执行的很糟糕。其中尤其重要的一点是,它做了微观的系统,却完全剥夺了玩家做微观操作的控制权。结果玩家玩游戏想在看一个自动化运行的机器,失去了参与感,尤其是 2 代的老玩家对旧的微观管理玩法保持着很高的满意度。
等到 2016 年推出重制版,又转回 MOO2 的思路,完全放弃 MOO3 的创新尝试。但复刻过去的游戏系统,面对同年有着组多现代游戏元素,完成质量颇高的群星,在太空 4x 这个玩家圈子中口碑已经无力回天。(当然,我觉得这个重制版还是很值得一玩的)
在我看来,MOO3 的思路是对的,如果执行的好也可以很好玩。但执行的好却很难。Distant worlds 初代于 2010 年发行,离 MOO3 发行的 2003 年已过去 7 年,我们在 DW 中发现了很多和 MOO3 几乎完全相同的设定,几乎肯定是受 MOO3 的影响。比如,游戏世界都分为民营经济和公共部门,玩家只能主动控制公共部门,但不可以干预民营经济。平民会自己根据市场需求买船运货赚钱,你只能从他们那里收税。很多民营经济下的设施和舰船,玩家可以参与设计和建造,但作出来的东西却不是你的,不受控制(有点怪怪的)。我没有玩过 MOO3 ,但我玩了 Distant world 。从玩家论坛以及 google 来的信息看,这些的确都是 MOO3 做过的。但不同在于,Distant worlds 允许玩家自动化所有的子系统(比如设计舰船,收税,派遣侦察舰等等),也可以让玩家手控。
我购买 Distant Worlds 后第一次是没玩进去的,直到最近重新研究太空 4x 系列,我照着一篇攻略重新尝试了一遍,这次会玩了。这篇攻略主打一个把所有的自动化(默认设置)全部调成手动,每个子系统都手操一番,让我可以直到游戏中到底发生了什么,游戏系统是怎样运作的。这次我才发现其中的乐趣。在阅读攻略时,作者写道,如果你觉得太麻烦,可以去试试更“简单”的 Aurora 4X 。从作者的写作风格看,我直到他在说反话,所以在研究 Aurora 4X 前,我就对游戏的复杂度有一定的心理准备。
Aurora 4X 的确更为复杂,对宇宙的模拟也更事无巨细。它被称为太空策略类游戏的矮人要塞,或是文本风格的宇宙模拟器。举个例子:你在设计一艘飞船前,需要对每个零件单独研究:发动机、燃油效率改进、武器的聚焦透镜、雷达的扫描波长等等。你需要率领不同领域的科学家团队,为他们组织实验室,他们会有不同领域的专长,在每个子领域单独做出科研突破。然后你再把每个零件的科研结果,通过不同的工厂和公司生产出来装备在一起,最终拼凑出一架独一无二的飞船。根据搭配的零件,再决定它用于侦察、殖民、运输还是战斗。 再以侦察为例,在其它游戏中点一下地图就可以派遣出侦察舰,而在 Aurora 4X 中却需要先创建一条命令,涉及侦察的路径,在不同场景下的行动(比如遇到敌人要回避,油箱见底前要回去加油,遇到不同的天体要决定侦察优先级等等),最后再把飞船绑定在命令上,最后自动化了。不光时领导实验室的科学家,帝国的军官等也有及其详细的履历,性格,技能加成,会生老病死拉帮结派,这在群星中倒能见到类似系统,只是没有 Aurora 4X 这么细致。
Aurora 4X 中还有复杂的天体引力系统,天体有着椭圆形轨道,和不同的公转周期。这使得星际航行的时间窗口都更为重要(更接近真实宇宙)。这在 Distant Worlds 中也有体现,但不如 Aurora 4X 系统复杂。和其它同类游戏不同,Aurora 4X 有独特的时间推进系统,玩家可以从 5 秒到 30 天的间隔。在太空狗斗时,需要按秒推演,可以通过微操舰船去拦截来袭的导弹。而进行宏大的研究建设项目时,往往以 30 天为周期跳跃,玩家只关注那个文本信息窗口,脑补游戏世界中发生了什么。
我饶有兴趣的搜索了 Aurora 4X 的历史,发现和 Starfire 有相当深厚的渊源。Aurora 4X 的作者的初衷就是想作一个辅助桌面玩 Starfire 的电子工具。(顺便学一下 VB ,他原本是个 C++ 程序员。选择 VB 应该是方便驱动 Access 数据库,而游戏的数据则选择放在 Access 中。他在学 VB 的过程中边学边做。不过最新的版本已用 C# 重制)这个工具在 starfire 完全圈子里风靡一时,但是最终和 starfire 开发团体吵了一架导致分道扬镳。
这段恩怨被记录在这个帖子的回复中 。喜欢八卦游戏史的我简单看了一下,大概是这样的:
Starfire 的电子辅助工具一开始是被官方推荐的,它基于 starfire 的第三版规则开发维护。但后来 starfire 大刀阔斧的改动推出了第四版规则。这种桌游规则的变化往往是剧烈的,更广为人知的对比参考是 DnD 的 3/4/5 版本变化,网络上可以找到很多讨论。总之,这个电子辅助工具未能更新到第四版,开发团队(准确说就一个人)希望在第三版规则上继续。在官方的口头承诺下,成立了一个粉丝组织叫 3DG ,继续维护第三版规则。3DG 的主导人物就是这个 Aurora 4X 的开发者。他们作了大量的迭代更新。在某个时间点,他暂时离开了 3DG ,3DG 就由官方接手。但 3DG 的其他成员并不满意新的官方领导,在后来原领导人回归后,矛盾就爆发了。
导火线是 3DG 在网上发布了新的基于第三版规则的修订版规则书,这侵害了官方(主要利益方也主要是一个人,也就是桌游开发者)的利益(至少在官方角度看是侵害了,他们在主推第四版)。所以 3DG 被要求解散,电子辅助工具也禁止继续维护。工具被下架了,但过了几个月就以 Aurora 4X 的形式重新上线,这次开发者就放飞自我了,完全不用考虑兼容 starfire 的规则限制,大规模的夹带了私货。这个事情最终没有真的闹上法庭,不了了之。
从另一篇访谈看 ,Aurora 4X 除了主要受 starfire 的影响外,还借鉴了一个古早的 DOS 游戏 Harpoon ,以及 战锤 40K , EVE Online 等等。
另一个桌游设计者(开发过类似桌游)写过一篇对 starfire 的评论 。他写道:
To put it another way, the original Starfire III campaign rules were 23 pages long. The last version of Starfire that I've purchased (Solar Starfire from 2012) is over 400 pages. To be fair, however, I think about 100 pages of that page count covers the tactical rules, but even then we are talking a 10x increase in content between the two editions. Is the game ten times better for the extra rules?
我觉得当桌游繁杂到需要几百页说明书时,电子化就成了必然之道。
回到 MOO 系列的主线上。市场上充斥着大量精神续作,这说明这个系列的玩法已经深深刻在老一代玩家的心中。除了官方重制版,上面还提及了星际之剑 SotS,ISG ,Distant Worlds 系列。我还略玩过一点 Endless space ,Polaris Sector 和 Star rules ,体验很少,不作评价。比较有名的还有银河文明系列,和太阳帝国的原罪系列,但我均未接触。
在免费游戏中,有完全复刻 MOO 一代的 Remnants of the Precursors (简称 ROTP),我虽然没有细完,但它在 MOO 老玩家中口碑颇佳。除了在交互和画面上最了现代化改进外,游戏系统几乎是完全复刻 MOO1 。是玩 MOO 重制版(核心还原的是 MOO2 )的之外的又一选择。
还有一个 freeorion 项目,也一直活跃。我没有玩过这款游戏,但曾经仔细阅读过源代码。主要是因为想了解一下这类 4x 游戏的程序结构。用开发者自己的话来说 ,它希望保持简单易上手,避免微观管理。所以在借鉴了 MOO2 一些有趣的新系统外,去掉了 MOO2 中的大多数微观管理,比如在我有限的游戏体验中,它并没有星球的工人放置系统,只需要为星球设定一个总的方向即可。也没有 MOO3 里面居多的水面之下自动化运作的复杂机制。
Endless space 其实也是个好游戏,我只试了一下 2 代,把教程过了一遍。印象比较深刻的是其中的卡牌驱动部分。它的战术部分用卡牌驱动,内政部分也用卡牌来表现其法律系统。用卡片还表达游戏中的选择在桌面游戏中及其常见,现在也越来越多的在电子策略游戏中见到。卡牌可以减少玩家的决策负担,过去很多独立的选项可以被合并在同一张卡片上,让单次选择变少,而通过组合增加变化。抽卡也可以增加一些随机性元素。采用卡牌驱动往往可以加快游戏速度。因为玩家面对的选择压力变少了,就可以快速决策。
在这方面有一款教新的游戏值得推荐一下,Nexus 5X 。它也是 Pardox 发行的,采用了群星的世界观。在 4X 基础上加了一个 X 为 Express ,它希望这类游戏可以摆脱单局动则数十小时的长度,在一个小时内可以玩一局。我玩了两局,的确节奏很快,但体验更像是一个数字化桌游。玩家群认为它是一个缩水版的黄昏帝国 Twilight Imperium 。我家里倒是有一套 Twilight Imperium 实体版本,只是一直凑不齐人开上一局,所以无法给出自己的评价。但通过抽卡打牌推进游戏的方式的确让人印象深刻。
这篇 blog 完全没有 AI 生成的文字,其中关于游戏的观点全部是我有了真实游戏体验后总结的。但在做这个课题(关于太空 4x 游戏类型)研究期间,我和 Gemini 做了大量的讨论。AI 的确可以给我很多思考角度上的启发,但是关于游戏本身的事实,很遗憾的是 AI 给的信息的正确率几乎在 50% 左右。也就是 Gemini 写的关于游戏本身的特点/规则/细节的描述,几乎有一半是错的。但它在语言上却铮铮有词,习惯了和 AI 讨论后,我必须把它和人讨论的过程区分开。如果和一个有经验的玩家讨论,我可以信任玩家的体验,但 AI 毕竟不会自己玩游戏,它只能从网上已知的文本中做总结。网上同类游戏讨论之多,让 AI 特别容易产生幻觉。或许以后的我们更应该学习的是如何更好的阅读 AI 产生的文本。
2026-06-11 17:46:49
quicksort 是基于比较的排序中表现最好的算法,它在大多数情况下都能接近时间复杂度 O(n log n) ,所以 qsort() 也是 C 标准库中排序的默认实现。但是,quicksort 是非稳定排序,即当原始序列中出现相同的元素时,经过 qsort ,这些相同元素的次序可能被调整。即两个 key 相同的元素,经过排序可能调换次序。
在某些场合,我们希望排序是稳定 stable 的。因为元素的 key 相同,但元素本身可以不相同。这些有着相同 key 的元素一开始以某种次序放入序列,我们不希望对 key 排序后,打乱原有的次序。当需要稳定性时,还有许多经典排序算法可供选择,例如插入排序,它非常简单,每次从无序序列中选择一个元素和有序序列的最后一个元素比较,要么追加在最后,要么向前依次比较,直到找到合适的位置插入。对已经有序的序列,插入排序的时间复杂度为 O(n) ,但对于逆序的序列,它会退化到 O(n^2) ,因为每个元素都要和之前所有元素比较一次,插入到最前。所以插入排序对于非特定场景(无特定规律的数据)的平均时间复杂度接近 O(n^2) 超过快速排序的 O(n log n) 。
但需要注意,光看大 O 时间复杂度是不够的。在 n 很小的时候,对实际开销影响更大的并非算法复杂度。因为复杂度是基于执行算法中每个单步操作的数量估算的,忽略了操作本身的时间差异。而 n 很小时,单个操作的开销占比就变大了。所以在 n 很小时,简单的算法每个操作都更短,对 CPU cache 也更友好,导致实际的总时间开销也越少。大部分排序算法的实现都选择在 n 很小时退化成插入排序。
对无规律数据集,基于比较的排序算法的理论极限是 O (n log n)。因为你需要至少对所有元素做一次比较,采用二分的形式分而治之是最好的方法,不断二分数据集的深度大致为 log n 。归并排序 merge sort 直观的体现了这个想法,它把数据不断对分,展开为一个完全平衡的二叉树,然后从叶节点逐级向根节点调整次序并合并,一路执行到根节点,就可以完成排序。所以它可以严格(即使在最坏情况)做到 O (n log n) 。或者这么看,合并两个有序序列只需要扫描两个序列各一遍,每次都挑出两个序列头部更考前的元素,插入新序列,就能得到合并后的有序序列。假设一共有 128 个元素,不断对分,就能分成 64 组元素每组 2 个。这两个元素调整位置合并成 32 组 4 元组,再继续为 16 组 8 元组,等等。
显然,merge sort 是很容易做到 stable ,但缺点是它难以在原地 in-place 排序,需要额外的空间。这导致实际实现时,需要额外的内存复制。在大多数要求 in-place 排序(大多数 sort api 都是这样)的场合,比 quicksort 要慢,且需要额外的运行空间。
但在真实世界的应用场合,大多数需要排序的数据并非毫无规律。针对有规律的数据排序就可以在工程上针对规律做出改进。一个普遍的规律是:往往需要排序的数据本身就是基本有序的,至少很多片段是局部有序的。因为你很难一次性获得海量的完全随机的数据集。数据都是逐步变多的,如果它们之前的片段是有序的,在整合到一起后,大部分还保持着次序;或者是原有的次序经过少量的调整,破坏了局部的次序。针对这点,就可以对 merge sort 做大幅改进。python 最早的版本直接封装 C 的 qsort() 实现排序,但随着 stable sort 的需求日益增加,在 2002 年 Tim Peters 针对这类情况改进了 merge sort 算法,最终成为 python 排序算法的标准实现。这是一个混合排序算法,一开始并未正式命名,但随着它作为一个比 merge sort 更能适应现实数据集的算法被引入 java 等其它语言的标准库,大家就用第一次工程实现者的名字命名为 timsort 。btw , 它的核心想法并不新,在 Knuth 的计算机算法艺术第三卷的排序算法中就有提到。
timsort 最重要的核心想法是:既然现实中的序列并非完全随机的,那么我们就先找出序列中的有序片段 (run) ,再对这些片段进行 merge sort ,这样就能大大的减少 N 。比如在极端情况下,一开始序列就是完全有序的,那么 N 就退化成了 1 。但是,如果我们一开始完全把序列的有序片段都标记出来,就需要等长甚至更大的内存空间记录这些 run 。原本 merge sort 的缺点就是需要更大的额外空间,但它需要的额外空间是固定的。如果在最坏情况下额外空间的上限更高 ,作为通用库,这是不可接受的。所以,需要一个有着固定上限的额外空间来处理这些 run ,且最坏情况也不能超过 merge sort 。
我们可以把 merge sort 的 run 看成是固定的 1, 2, 4, 8 ... 虽然算法描述是递归的,但由于我们不会处理超过 2^64 个元素,所以递归深度非常有限(低于 64 )。而且在这个固定规律下,很容易得到一个非递归的实现。当 run 的长度不固定时,Tim 认为用一个自适应的方法合并相邻 run 就可以了。应该尽量的将相邻的小 run 合并成更大的片段,而避免把已经很大的 run 上追加相邻的小 run 。至于为什么只能合并相邻的 run ,因为只有这样才能保证 stable 。
他提出顺着扫描序列,找到三个连起来的 run 就可以决定该合并哪两个更好。在 Wikipedia 上 timsort 页有简单的描述,还有一篇 blog 也有解释,cpython 的邮件列表里也有一篇叫 listsort.txt 的文档(链接以不可访问)。我全部读过后发现它们之间有细微的差别,这让我很疑惑。直到我读到 On the Worst-Case Complexity of TimSort 这篇 paper 才确定正确的描述。然后又看了 youtube 上 Quicksort, Timsort, Powersort - PyCon US 2023 talk 进一步印证了这点。
原始的算法是这样的:
用一个栈记录从头扫描每个 run 的长度。比如最后的三个 run 长度为 X Y Z ,其中 Z 是栈顶,也就是最后扫描到的 run 。
首先检查规则 A :当 Z 长度大于 X 时,把 X Y 合并起来,栈顶留下 (X+Y) 和 Z 。
如果不满足规则 A ,再检查规则 B :当 Z 大于等于 Y 时,合并 Y 和 Z ,即栈顶留下 X 和 (Y + Z) 。
若以上都不满足,但满足规则 C :若 Y+Z 大于 X ,则也合并 Y 和 Z ,结果和应用规则 B 一样。
若三条规则都不满足,就继续向栈顶添加后续的 run ,重复这个过程,直到整个序列扫描完,最后依次合并栈顶两个 run 。
这套规则的想法是:尽可能的把较小的相邻 run 合并在一起,但如果连着三个 run 长度类似,避免将仓促合并,而继续看下一个 run 。但实现上需要给栈设定一个最大的上限,因为它是利用 C 的 stack 实现的,需要避免 C stack 溢出。如果遵循以上规则,保留 run 长度的栈就会从大到小排列,因为一旦有更长的 run 入栈,就会引起合并。规则 C 则保证了最前面(栈底)的那一项长度超过后两项的和。这可以保证整个序列最坏情况类似斐波那契数列,大致上是指数分布的。这样,栈的最大容量在 64 位系统上也可以用一个较小的值就能保证不会溢出。
在很长时间里,没有人去验证这个假设是否是严格正确的。这个算法也被抄到了更多地方。直到有人试图用形式化证明 java 的 OpenJDK 正确性才发现有问题。
比如,我们构造这样一个序列,92 28 20 6 4 8 1 ,前 5 项(92 28 20 6 4 )依次入栈时,每一项都不会被合并,同时保证了依次递减,每一项都超过后两项之和。但接下来的 8 入栈就发生了变化,因为 8 > 6 ,所以 6 和 4 被合并位 10 ,序列变成了 92 28 20 10 8 ,这时,中间的 20 + 10 已经超过了前一项 28 。最后一项 1 入栈却并不会促使前面项的合并。这会导致算法根据算出的 2^64 项以内最坏情况下需要的栈容量上限偏小,精心构造一个序列就会导致栈溢出。Python 和 Java 在修复这个问题时采用了两种不同的方案。Python 增加了第四条规则:新入栈的 run 如果没有引起合并,要重复检查一次原有的栈顶三项,看前一轮合并适合做的彻底。这个方法后来被形式化证明是完备的,只不过每轮入栈可能需要多一次判断。Java 一开始的修复方案是重新计算了一个更大的理论上限。不过这个上限后来被证明又算小了,重新打了一次补丁。不过这只是理论值,构造一个超出错误上限造成栈溢出的序列,需要相当大的长度,所以实际上并没有发生过。
依赖形式化证明堆栈上限看起来过于隐晦,需要一个更简单明了的算法确定保存 run 的栈大小上限,这是 python 3.11 引入 Power sort 的动机。了解 power sort 的设计思路可以从回顾 merge sort 开始。merge sort 本质上是基于完全二叉树的逐层合并,所以,即使用递归实现,栈深度也严格保证在 log 2 之内,也就是 2^64 元素最多需要 64 层深度,这一目了然。当 run 的长度不确定,由原始序列中固有的有序片段长度决定,我们还是可以让合并策略尽可能的近似完全二叉树。由于我们假设了原始数据局部有序,所以可以看成是提前做了一些合并,那么理论上需要的栈深度不应超过 mergesort ,最坏情况也是和 mergesort 一致。
所以,可以先想象一个虚拟的完全二叉树,然后在遍历序列时,把每个 run 和虚拟完全二叉树的 run 对比,找到相邻的 run 对应到完全二叉树上是否应该合并,还是已经被合并过了。由于完全二叉树可以通过非常简单的公式算出每个分支片段,所以并不需要额外的储存空间。算法就变成了每次看栈顶两个相邻 run 的中点落在哪里,找到它和虚拟完全二叉树上最接近的节点,记录下它的层级(power),越靠叶子节点的 power 越小,越靠根的 power 越大。由于节点数量限制在 2^64 ,所以 power 最大就是 64 。而合并规则就可以简化成:让保存 run 的栈额外记录每连个相邻 run 的 power ,栈中元素的 power 必须依次增大,如果减少,就合并栈顶两个元素,并重新计算合并后的 power 。显然,栈的容量上限就是 64 ,不需要过多的形式化证明。
powersort 未必一定优于 timsort ,但在实践中它几乎总是略微好一点:更像 merge sort 表现的那样,尽可能的先合并较小的 run ,逐层合并成更大的 run 直到完全有序。当然,它虽然减少了每次合并前的条件判断,但增加了一个常量时间的 power 计算,使用 power 来拟合 merge sort 的完全二分也不总是正确,这些都有可能导致在某些条件下比 timsort 略慢。但关键在于,它运行需要的栈上限清晰明了。
如果想更进一步理解 powersort ,非常推荐上面提到的 PyCon US 2023 上的那个演讲,其中有非常清晰的算法视觉化演示。
除去改进了这个如何启发式合并 run 的算法,powersort 的其它部分和 timsort 是基本一致的。timsort 的其它对 mergesort 的改进几乎都是针对数据局部有序做的,长期实践也证明它的确非常有效。
其一,当数据基本有序时,合并两个 run 需要的额外空间可以大大减少。假设相邻的两个 run 原本就是基本有序的,只是很少的数据调换导致了分割成两片有序 run 。那么,我们可以用二分法找到前一个 run 中前一半不需要移动,以及后一个 run 中后一半不需要移动的两个端点。这两部分都不需要调整位置。剩下的两段,只需要更短的一半额外空间就可以整理成有序的序列。这是因为,我们只需要把其中一个 run 复制出去,然后在空出的位置上做合并。如果是前一半空出来,就从前到后合并;如果是后一半空出来,就从后向前合并。即使是最坏情况,也不会超过 N/2 的额外空间。
其二,在合并两个 run 时,如果发现连续取用其中一个 run 上的数据,就可以进入 Galloping 模式,即用二分法找到一段数据复制,而不是一个个比较。这里给 Galloping 设置了一个限界,逐个比较次数超过这个值时才启动 Galloping mode ,根据 Galloping 的成功率,动态调整这个值。
其三,针对逆序的数据做特别优化。因为把逆序序列倒转过来是很简单的,O(n) 就可以完成,但用传统 merge sort 的方法成本要高得多。在预扫描 run 时,检测前两个元素的次序就可以用来猜测这个 run 是正序还是逆序的。注:如果是逆序的,需要对相同元素做额外一点处理保证 stable 。
其四,由于 mergesort 是二分分治,所以在元素数量不足 2^n 时,复杂度其实是向上补足 2 的整数幂。即处理 1023 个元素和处理 1024 个元素近似,而处理 513 个元素也和处理 1024 元素类似。所以,分片的数量比 2 的整数幂略小一点最合适。timsort/powersort 解决这个问题的方法是设定最小的 run size ,它根据 n 的大小在 32 到 64 之间动态调整。在中间找到一个数 m ,让 n/m 最接近 2 的整数幂。这只需要取 n 的最高 6 位再加 1 就可以了。对于最小的无序 run ,采用插入排序。
2026-05-23 15:04:32
缺氧(Oxygen Not Included, ONI)和异星工厂(Factorio)都是自动化领域的神作,它们在 Steam 上都有自动化、基地建设、资源管理的标签,可见游戏体验上有相当多的相似之处。玩家群体也高度重合。但是什么造就了它们的独特性?而不会像 Satisfactory 或戴森球计划之于异星工厂那样,有着深深的同类基因。
从游戏核心上看:
缺氧把玩家放在一个有限资源的环境下,一切都是资源转换。玩家玩游戏是一个熵治理过程,把无序变为有序。除了玩家的主动行为,还有丰富的、半随机的、环境自然推演。缺氧的物理系统在很大程度上模拟现实,这减少了玩家的学习成本。但在细节上和现实有所不同:质量和能量都不是守恒的,随着玩家活动,物质会减少,热量可以被主动删除…… 这给了许多玩家对付系统熵增的武器。而一个封闭系统中的热力学熵增,就是玩家需要对抗的系统崩塌。
异星工厂(原版)这提供给玩家一个无限地图。扩张面对的是物流和自动化的指数级复杂度上升。(在原版中)玩家不断追求更大更快的自动化生产线,在这个过程中,需要增进对游戏系统的理解,找到在下一个指数级上的自动化解决方案。玩家很少会面临系统崩溃,虫子的威胁虽然存在,但几乎可以忽略。即使去掉虫灾威胁,游戏也几乎不会损失太多体验。
两个游戏都强调物流。玩家都需要通过规划设计,在 2D 平面上把物品的需求和供给连接起来。
异星工厂机械爪和传送带是其经典元素。但为老玩家所熟知的还有液体管道、火车、无人机等都颇具游戏性。这些物流手段的差异在于吞吐量、延迟、控制复杂度、能量开销,在玩家优化物流时,需要在其中权衡。
缺氧很少鼓励玩家优化物流效率。它实际上也有无人机和管道运输两种基础物流,但却和异星工厂是反过来的。异星工厂先引入的是轨道/管道物流,无人机则在科技树后期开放;而缺氧一开局就给了最智能的“无人机”也就是仿生人,只需要指定需求点,仿生人就能自动的搬运物品。轨道运输反而需要仿生人的技能点足够了才能点开建造。清扫器(对应异星工厂的机械爪)也显得智能的多:只要在其作用覆盖范围内,就能自动的满足需求。大多数场景下,甚至不需要铺设轨道(对应异星工厂的传送带)。
缺氧因为单个地图都不太大(DLC 更是减小的母星的规模),所以单个地图上仿生人跑图的成本非常小。物质被存放在三个环境:地图格、散落在环境中的碎片以及工人设施中。物流手段大体上都可以看作是在这三个环境中的转换。例如,有的机器和环境交换流体,有的连接管道。所有的机器的固体产出都以碎片形式掉落在环境中。清扫器(爪子)可以在工人设施间传递物品,也可以将环境碎片放置到人工设施中。仿生人和挖矿机都可以把地图格上的固体转换为碎片,但仿生人只能把少量流体擦拭为碎片,无法直接转换地图格中的气体。液体和气体碎片必须通过设施投放到地图格,固体则需要依赖物理规则和温度变换才能在地图格结块。
而在费人工环境下,物质转移遵循的是系统的物理法则;仅有人工环境才可以通过轨道转移物品。可见,无论是固体轨道还是流体管道,在缺氧中只是大系统中的一个小部分(而不像异星工厂那样是核心系统)。缺氧的轨道更多为了解决封闭环境问题:缺氧需要玩家维持局部生产环境,真空、特定气体、高温、低温。而仿生人虽然是一个相当智能的物流工具,却会因为其活动感染环境。轨道则可以解决环境封闭后的物流。
和异星工厂颇为不同的是,缺氧里用仿生人做物流的效率大大超过轨道运输,速度更快,吞吐量更高。比如你用装罐器在 A 处把液体或气体装罐,再在 B 处卸载。物流效率上甚至超过铺设专门管道。其实,在异星工厂中也有类似的设计:你用背包装满物资,人肉运输和装填,效率或许是最高的。只不过无法自动化而不可能在大规模生产活动中持久使用。
缺氧中的轨道多用于在不适合仿生人活动的环境中使用,或是用于热交换。
热是缺氧中最特别的东西。它无法通过物流手段直接搬运,只能通过同一格或相邻格之间的热传导。将一个格子或一个东西控制在某个温度范围却是游戏后期的普遍挑战,这是造成缺氧和其它游戏差异的重要游戏元素。
两个游戏都有采矿,冶炼、制造设施、建设基地的元素。它们都可以用一系列基础设施组合起来构建更复杂的模块。比如在异星工厂中,玩家可以设计搭建不同的核电站、炼钢车间;缺氧中也可以设计不同的动物养殖场等等。高级玩家都是以功能模块为单位设计基地的。
缺氧模块的元素比异星工厂要更细粒度。从游戏设定上来说,缺氧本质上只有四种模块的建设材料:矿石、金属矿石、精炼金属和人工材料。虽然看起来玩家还是要先把这些基础材料建设为人工设施,再用设施搭建模块。但因为建设好的设施还可以无损的分解回材料碎片,所以也可以看作是用这四种基础材料搭建模块的。而异星工厂则是把原材料在生产流水线中经过若干工序的加工为机器,再将机器铺在地板上。机器无法(通过游戏的基础机制)还原为材料。
两者对比,可见缺氧在用更少更基本的元素搭建复杂模块。缺氧很多时候需要用多个设施组合起来才有基本功能。比如用一个管道元素信号器加上一个流体截断器可以拼装出一个流体分流器,它依赖的是更底层的流体在管道中流动的规则。异星工厂中也有类似的东西,例如用多个二分器和传送带一起构建一个更复杂的分流器。但两个游戏的差别在于,异星工厂的原件组合的规则更直白一些,更多的场景是组合的规模;而缺氧往往用几个原件在相对隐晦的规则下拼装在一起,并有着说不清的边界条件。
由于缺氧中搭建模块必须靠仿生人行动,所以建设次序有时也很关键。比如说斜角方块可以在不破环封闭性的前提下挖开或修建,如果破坏了封闭性,可能会破坏环境的封闭性,增加不必要的后续补救操作。不像异星工厂,需要解决指数级增加的生产需求,游戏本身提供了蓝图支持。缺氧中大部分模块在同一局游戏中只用建设一次,熟练的玩家不仅要记住一个模块的样子,还要注意建设次序,或是根据环境以及不小心犯下的小错误而动态调整。缺氧中的模块从尺寸上来说要比异星工厂要小,但它提供了更多的分层:除了功能层外,电线、液体、气体、轨道、信号在不同层上,这让它在更小的网格区域提供了更多的复杂度空间。
异星工厂改建模块的成本是相对较小的。建设、拆建、升级,有了蓝图和无人机的帮助,只是下达一个指令,在宏观上管理即可。这给游戏在规模上递进提供了玩法基础。缺氧的改建成本有时会变得很大。从游戏设定上看,有些设施拆除的时间成本就建设的成本高。环境的破坏成本也远低于建设成本:典型的例子就是抽真空是个及其费时的过程,而挖开一个砖块就可能打破真空环境。这也导致了新手在把基地建得一团糟后,重开一盘往往是更好的选择。虽然异星工厂也有类似体验(没建好就重开),但重建基地要容易的多。
异星工厂中,机器只要通电解决好供给和输出,就可以无限运转下去。建设基地可以人工快速铺建,也可以通过建设无人机蓝图铺设。玩家在不断的解决自动化的后勤工作。这样设定的前提是:资源接近无限,需要提升的是生产模块,以并行处理来提升生产效率。
缺氧则通过指派任务来进行游戏中的活动。相当多的机器还需要仿生人操作。运行机器也是任务的一部分,和建设及物流并列。
虽然 Rimworld 在这方面类似,都是间接的像小人下达任务指令,但我认为在内核上缺氧还是更接近异星工厂一点。你甚至可以把仿生人看成是异星工厂中无人机的加强版本,几乎不会有人会对缺氧中的仿生人共情。而 rimworld 中的小人却有更多的“人”性。但和异星工厂相比,缺氧一个显著的不同点:缺氧中的任务是需要分配优先级的。这是因为下任务太容易,很容易堆积下永远无法完成的任务清单。但任务间隐藏的依赖关联,游戏的底层规则未帮你自动理清。
让制定优先级成本核心操作的基础是:资源有限,任务有限,单个任务的步骤繁多并有隐藏的依赖关联。
异星工厂是靠研发科技推动游戏进程。从游戏设计上来看,可以明显感受到科技瓶生产本后需要的产能级数上升。玩家可以感受到爬科技树推动着游戏过程。未解开的科技驱动着玩家增加生产率,解开的科技则引导玩家通过新科技升级生产过程。在(原版)通关后,还可以追求发火箭的速度,在更高效率产能的需求推动下,寻找更大模块生产的策略,同时,那些可以无限循环的科技也能进一步的促进生产效率。
缺氧的科技树很早就能完成,玩家从新手成长起来,更多的是不断增进对那些科技解锁的设施的理解。游戏的绝大部分时间,科研都不太阻挡游戏进程。在一盘游戏中,玩家要做的工程总数并不多:建设供氧,解决食物来源,发电,删减累积的热量,获取火箭燃料,取得太空材料,制造终极火箭。这些项目并没有直接写在任务书中,也不存在于科技树上,而是在玩家玩的过程中,通过发现环境的改变,需要面临新的挑战而激发出来。对比异星工厂那个写在科技树顶端的科研项目,缺氧中促使玩家发展的暗线是材料。获取更高熔点的金属,在极低温度下也能保持液态的制冷剂,这些都可以在更宽的温度环境下用老方法获得新东西,直到最终制备出液氢火箭探索时空裂隙。
2026-05-16 23:57:29
又玩了半个月的缺氧,目前累积游戏时间已达 645 小时,感觉对这个游戏有了更多理解。
我重新开了一盘,尝试用纯仿生人开局,依旧是保持 3 个初始小人开荒。仿生人不用吃食物,三个周期集中做一次呼吸,只要解决了能源问题,玩起来还是很舒服的。但仿生人需要定期上油,基本的方案是用排泄的残渣油做成润滑膏自循环。但我在查配方表的时候发现:润滑膏其实可以裂解成石油,而润滑则可以用菌泥榨成植物油替代。这样,似乎就多了一种方法在游戏初期拿到石油。
在我的理解中,缺氧的石油在开荒期的主要用途是做精炼金属的冷却剂,配合蒸汽机可以做到净增的电能。和现实常识不同,缺氧的世界是不遵守能量守恒的。金属精炼机消耗固定的电能功率,同时把金属熔解需要的热传递到冷却剂中。也就是输入固定的电能,输出不确定的热能。而蒸汽机则可将热转换为电。这导致,精炼某些金属,比如游戏开荒期急缺的钢,不仅不消耗电,还能产电。
但蒸汽机有个使用门槛:它只能将 125~200 度的蒸汽转换为 95 度的水。所以只有当精炼金属的冷却剂的温度提升到 125 度以上时,才可以用来发电。用水做冷却剂显然不行,因为水的沸点只有 100 度,冷却剂会气化,导致冷却管损坏。而石油是游戏初期最为常用的精炼冷却剂:它在 540 度左右才会发生相变。只要用石油做冷却剂炼钢,在炼钢的过程中会获得大量熔解铁的热,温度升到 200 度,然后送去蒸汽机还原为水,就能发电了,发的电将超过运行精炼机的电开销。
对大部分玩家来说,用石油冷却炼钢,通常是在游戏中学会的第一个主动热量控制的玩法。如果没有做足功课(比如看老玩家的攻略)自己研究缺氧的话,在面多了加水,水多了合面的试错过程中,一般会在基地变成蒸笼后第一次思考热控制的问题:看起来游戏中大部分的生产活动,哪怕只是小人闲逛,都是电能或生物能想热的单向转换。而游戏中提供的字面意义上的降温机器,似乎都在转移热量,而不是消除热量。这导致了整个基地的热会缓慢的上升,直到不适合生存。
初看蒸汽机需要在 125 度以上蒸汽的高温环境才能工作,却可以用来消除热,有点反直觉,细想又些合理之处。这就是游戏提供的挑战:先把温度(通过某种热交换)升上去,再用蒸汽机降下来,从中删除热。至于输出的 95 度的水依然温度很高,但绝对热量减少了。接下来,可以再利用冷凝机,消耗电制造温差降温(但不删除热),把温度继续降低到常温。这个过程也和现实不同,不遵守能量守恒:制造温差是需要输入电能的。
缺氧玩下去,直到通关。一直在挑战玩家,怎么获得极低的低温,如何掌控极高的高温。
和异星工厂这样的游戏不同。缺氧里没有直接的给出一个机器,造出来使用就可以制造低温材料或高温材料,也不是去到更远的地图上就能获得。这个限制在于大部分的机器都有一个工作温度,通常在常温附近,远低于制造机器材料的熔点。所以根本没法在高温环境使用它们。但仔细推敲游戏中的设施说明,似乎有一些端倪,比如碳炉没有工作温度限制,可以不断的炼碳堆积热量,似乎只要在一个密闭空间往里面塞材料,就能无限升温直到碳炉达到自身的融点。
看起来只要找到极高熔点材料来做碳炉就可以获得超高温环境了(实际操作却没那么简单)。
又比如,金属精炼机会把熔炼金属的热量输出到冷却剂中,而不是堆积在机器上。这使得它可以在室温下熔炼上千度的金属。找到合适的冷却剂就能把冷却剂加热到极高温度……
冷凝机也是如此:它可以无限把输入液体降温,只不过将热输出到自身的环境中。只要能找到凝固点极低的液体材料。事实上,缺氧的通关挑战就是制备出液态氢做燃料驱动终极火箭探索时空裂隙。
其实,不仅仅是高级材料。游戏中海暗藏了诸多并非依赖特定材料的温控挑战。一般来说,更复杂的方法都意味着生产效率。
缺氧的世界里,资源是有限的,玩家能做的大部分活动,都是在转换材料,而不是生成新的。而且在转换过程中,不仅不遵守质量守恒(表面上大体遵守),还伴随着质量损失。冶炼是将矿石变成金属、种植是将泥土变成农作物、烹饪是将有机物变成食物、进食是将食物变成废水……如果游戏世界里不存在火山和流星雨的话,游戏一开始看到的由海量砖块构成的整个世界终将变成虚无。更高级的转换方法意味着更少的损耗,不光是原料,还有生产过程中花掉能量对应的损耗。
以石油为例,如果只是查阅游戏手册的话,会发现最直接的制造方法:从原油精炼。但这个过程只有 50% 质量的原油转换为石油,平排放少量天然气。btw, 这质量减少或许对消除热反而是件好事。虽然原油精炼机本身会产热,但由于质量衰减,一些原油中的热被同时删除了。
但是,如果你能有办法把原油加热到 402 度的话,它们会 1:1 相变为石油。相当于产能提高了一倍。而且没有排放到环境中的天然气这种副产品,不需要做额外的气体管理。石油精炼机需要小人操作,但通常 400 度高温,想用一般人员操作的机器去做也办不到,只要找到方法,还可以节省劳动力。
由于采原油需要消耗水,而石油发电则可以产生废水。当原油和石油的转换比例为 2:1 时,用原油精炼石油发电的过程,水时亏损的;但如果有办法将转换比例提高到 1:1 ,水反而有正收益。这相当于,采集原油不仅不耗电耗水,还可以用来发电产水。
人工产生高热的方法有很多,比如上面提到的烧窑炉,还有熔炼玻璃(玻璃熔炉可以产出高达近 2000 度的熔融玻璃),但想利用它们却不简单。最容易想到的方法其实是利用地图底层的岩浆,它们有 1600 度的高温,只需要把热抽出来即可。这就是所谓的地热裂解石油。
我在最近的一盘新游戏中,倒没有在开荒期裂解石油的想法,因为油井要在第二颗星球上才有。我想的是怎样更早获得第一箱石油用于炼钢。仿生人的排泄物残渣油和原油一样,可以在高温下相变为石油,只是问题稍高一点,需要 450 度,但制备方法也是非地热无它。所以,我就尝试了在游戏开荒期开发地热。由于是开荒期,能动用的材料和人力都很有限,玩了两天后,我感觉对游戏的热交换机制有了一些新理解。在推特上和玩友进一步讨论后,索性在沙盒模式下测试了一些新想法。
如果在网上搜攻略,会发现地热开发都需要建设一个不算小规模的模块。通常,用金属砖或砖石砖把岩浆块中的热向上导引到高处,然后用一个金属气闸和模块连接并密封。这个金属气闸就是热桥。当用信号开启时,密封环境下的金属气闸打开会形成真空,而在缺氧的设定中没有热辐射,真空是完全隔热的;当金属气闸关闭时,金属材料会高效的传热。
导入的热可以轻松的把原油加热到 400 度 (或残渣油需要的 450 度),直接无损变为石油。
但上面制备出石油只是最简单的一步,难的是如何将高温石油降温利用。一般攻略里会教你做逆流换热:让低温原油接触高温石油,在原油加热的同时,石油也降温了。这通常做一个置顶向下的之字形通道,让高温石油自行流下,而低温原油在管道中逆流向上,一路和石油换温。等原油抵达加热处(顶上引入的岩浆高温块),预热的差不多了,只差临门一脚;石油流淌到最下方,也降低到可以接受的温度。
这里需要注意的是裂解时的温度,如果超过 540 度会继续相变为高硫天然气。所以一般会额外做一个热容器让裂解时温度变化稳定一点。
为什么网上找到的几乎都是逆流换热这个方法?我思考了一下,这是游戏机制决定的策略。
游戏中大部分机器的工作温度上限是 75 度,如果用金汞齐材料可以提高 50 度,用钢可以提高 200 度(后期还有更好的材料,但需要到游戏晚期);所以,125 /275 度几乎就是用机器操作的温度上限。超过 275 度后,必须利用游戏物理规则,而不是机器来控制世界中的物质。
在缺氧中,物质存在于三种状态,环境中的砖块、环境中的碎片、单位的附属物品。环境中,每个格子都只能存在一种物质砖块,或是固态或是液态或是气态或是真空,砖块会依据游戏的物理法则在环境中运动。固体几乎不能动;液体会流动,并受重力影响下落,气体会扩散,并据摩尔质量而分层。当玩家去影响这些砖块,可以把这个砖块变成碎片掉落在所在格,再可以拾取带在身上或放入机器中变为物品。
一旦砖块变为碎片再转变为物品,玩家就可以利用各种手段在游戏世界中移动它们。但温度就是它们之间的门槛。超过了机器的工作温度,无法用机械手段处理它们:不能把固体放进运输轨道、流体塞入管道。比如,当你想对超过 275 度的环境物体进行降温,不能拿起它们放在一台可以降温的机器中,而是需要把你可以控制的低温物品用管道送去它的同一格,依靠游戏物理法则交换温度:低温物体升温,高温物体降温。
那么,是否可以把原油转变为 400 度的石油就放在那里,静候它降温呢?理论上,它们最终会和环境保持一致的温度。但这个过程时间很长。缺氧中的自然运动都非常缓慢。但这还不是重点,重点是如果你把常温的原油变成了高温石油,等于往你的活动区域注入了相当大的热量。如果你不消除这些热量,最终都会反映为活动环境的温度上升。石油质量不小,300 度的温差意味着大量的热量。1kg 的原油,300 度温差大约是 50 万 DTU 。而一台蒸汽机全速工作,每秒大约能删除 80 万 DTU 。
这就是为什么,必须用升温得到的石油去加热常温的原油。只有这些,带入环境的热才相对更少。假设你引入地热把原油提升 300 度变为石油,再把这额外的 300 度温差转移到下一批同等质量的原油上,那么除了第一批原油,后面你就没有引入额外的热量。但不引入额外的工作,无法做到 100% 的热量转移,所以最终还需要一点点的主动散热才能做到热量平衡。
我这几天反复在沙盒中尝试的是:能不能做到一个较小且简单的模块做到把原油升温,再对其降温,做到热平衡。根据计算,光靠蒸汽机肯定是不行的。游戏中不设工作温度的工具实在有限,但因为限制,反而可以在有限的选择中尝试。
典型的是气闸门,可以随便用信号开关。前面已经提到气闸门可以用来做热桥,多个气闸门串联似乎还可以用来推动流体。但我不太想构建过于复杂的自动化机构。
流体容器和泵都有工作温度,这意味着无法把高温流体塞进管道控制流向。即使在低温段进入管道,当温度上升后,也无法做限流等控制,唯一例外的排出口,即从管道系统中排放到环境中是不受温度限制的。
直接在室温和 400 度高温之前控制不太可行,我们需要的是温度的梯度变化控制。275 度到 450 度之间完全不能主动操控,125 到 275 之前可以有限操控,125 度以下可以随意控制。
每次控制的质量多寡是有差别的。一次处理的质量很少时,温度变化很快,需要小心不要越过相变点;一次处理的质量很多时,需要累积很长的时间,长周期往往意味着环境会累积很多不可预期的变化。尤其时流体,对环境中的大质量砖块花很长时间升温或降温,就必须考虑这段时间它的流动行为。
如果只是想处理第一点点油,不考虑热平衡的问题,可以把地热引出来,在旁边放个小水库自然降温。虽然热进入了活动环境(水库温度上升了),但量少可以接受。这就好比游戏开荒期,都是抱着一个小水库炼第一批钢的。关键的技术点是怎么引出岩浆中的热。

这是我的方案,和网上常见的攻略不同,我用的是一些更早期的材料,适合在非常早期快速启动。在图片的红框处用了一点小技巧,那么个被碳掩埋的温度传感器。只需要挖开一个空格,在上面做一个温度传感器,并用煤做一个变温板。因为煤在 200 多度就会相变为精炼碳,所以就坍塌为一个碳方块,但温度传感器被固体掩埋后可以继续工作。用这个方法下面接上气闸门做的热桥和金属方块(图中是金属变温板)就可以非常安全精确的导入地热了。
因为这里我们需要的温度不超过 500 度,它们的材料用铜制就可以。接触岩浆的部分,虽然岩浆有 1600 度(邻接岩浆的深渊晶石 1300 度),但气闸门连续导热时间不会太长,实测最高温度在 1000 度之下,用铁(而不是钢)也是安全的。但铜的熔点太低,不可以使用,这包括连接闸门的信号线。注意:在热传导中,信号线/电线/管道等的导热是不可忽视的,不能光关注砖块。
这个建议地热装置把导热块设定在 400 或 450 度,超过就打开气闸门(关闭热桥),导入的环境的最高温度不会超过设定温度之上 20 度(算上开关热桥本身的时间差),由于自然换热,方块之前会趋向热平衡,方块不可能自然升温超过最高温方块。这个温度传感器得到的温度,是整个系统中的理论最高温度,所以这个依赖这个温度信号的机构是绝对安全的(石油因为超过温度而气化)。
从上面滴入原油,靠环境加热到相变温度后,会变成石油,继续滴入原油,两者需要占据两个格子,所以液面会提升。最终被挤上去,落入右侧的自然降温区,靠右边的水池降温。
除了下面的热桥,需要自动化控制的是上面的滴落口。如果一次加的原油太多,来不及变成石油。这里的方法是在低落点检测元素,发现是石油的话就继续滴。因为原油的密度比石油大,所以滴下来会沉在最下面和导热块直接接触,并把之前裂解的石油挤上去。推友提示说,石油和原油密度不同,单个格子石油质量有个上限,所以这里用液压传感器也可以(原油可以制造的最大液压超过石油)。但我尝试过之后,发现液压控制要求一次处理太多原油(单格装满),这样单个制备周期过长。
为了长期运行,我设计了一个带自身热平衡的模块。和网上传统的模块比,显然规模要小得多。我已经在沙盒中稳定的运行了 100 多周期。

它本质上也做了一个逆流换热机构,只不过不是用得自然流淌的通道,而是让低温原油在管道中绕圈做自循环。
低温原油先绕进右下的黄色区域,这个区域也是石油的最终出口,保持温度在 120 ~ 170 度左右,原油会对其降温,并将自己预热,部分回流到左上的初始区。长期运行的结果会将左上角的原油初始区温度提升到 120 度左右(所以这里的泵需要至少金汞齐)。
黄色区上面有一个主动降温区(绿色框),和黄色区用金属砖接触,用蒸汽机降温,同时可以稳定输出一定的电力。由于蒸汽室最低温度会停在 125 度(蒸汽机停止工作,也就不会输出 95 度的水继续降温),所以黄色区域在长期运行的温度下限就是 125 度。在初期由于有低温原油降温,温度会更低。如果持续有常温原油输入的话,黄色区会降低到一个更低的温度。但为了安全,黄色区的水泵还是钢制比较妥当(稍微超过了金汞齐的上限)。我在的设定是 130 度以下就把石油抽出。
橙色区是中温区,温度在 170 ~ 250 度左右。和黄色区用气闸门隔开,制造出温差。它的区域不大,只有 2x4 格,里面放了一圈自循环的管道。原油进入后,会不断循环升温,直到红色区域放行进入。
红色区域下面和地热源接触,本身的空间更小。更小的空间保证了一次加热的高温油不会太多。依然是一个 2x4 的管道死循环。这里设定管道温度达到 400 度的相变温度才从上方滴落。当然,在启动阶段,如果红色区域为空(液压检测),也允许滴入。这让红色区域的温度大部分时间都接近 400 度,滴落的液体瞬间就变成石油。当红色区域超压就会开门放入橙色区。同时,从原油从橙色区的自循环管线进入,原来黄色区管道中循环的液体进入橙色区,橙色区管道中循环的液体进入红色区。管道系统的三个循环圈逐级升温。
绿色框的主动降温区用了一个冷凝机额外对蒸汽机降温(使用上面那个独立水箱做冷却液)。它的工作时间不长,所以蒸汽机本身的发电就够用了。蒸气室内的温度几乎不会超过 170 度(因为最高温受红色区的高温限制),其实用金汞齐做冷凝机也可以。但我试运行时还是用了钢。
这个模块中几乎没用什么自动化信号,就是简单的用温控气闸门,以及最终的水泵。因为只靠温度控制,所以可以看到模块中混杂了石油和原油。这是因为没有设计额外的机制保证原油不从 A 区漏出。但这关系不大,在黄色区抽出的时候过滤一下即可(绿色区右侧有一个过滤器)。原油重新回到循环中是无害的。
它只所以不需要复杂的自动化控制,是因为原理很简单:
低温原油先在低温区转圈,把原油加热到低温区的平均温度。如果中温区有空位,就进入中温区,否则一直循环;同理,高温区没有空位,原油就在中温区循环;高温区会在管道中把原油温度加热到和环境一样的温度。环境中是原油和石油的混合液体,由地热砖持续加热。地热砖达到上限温度(我设为 500 度)就断开热桥,严格保证高温区的温度上限。
当(很小的)高温区装满时,打开闸门,将部分液体放入中温区,同时由于有了空位,中温区的原油管道进入高温区。
中温区和低温区的闸门由两个区域的温度同时决定。如果中温区温度不足(高温区的高温石油流入不足),或低温区温度太高(主动降温还不充分),它们是隔开的。这保证了中温区和低温区的温差,降低了用蒸汽机的压力。闸门的控制温度是反复实验的经验数字,衡量标准是让蒸汽机 90% 以上的时间都在持续输出电力,又来得及把最终石油的温度控制在 130 度左右。
附:水管接得很混乱,如果设计一下应该可以规划得更好。
