《城市:天际线》中的图灵机:用水电管道做一个四位加法器

科技行者 2019-07-22 14:10:20

你真的可以在《城市:天际线》游戏中构建一个4位加法器(4-bit adder)。

《城市:天际线》是一款城市模拟游戏,其复杂的游戏机制甚至允许玩家在当中建起通用逻辑门(universal logic gates )。以通用逻辑门为基础,我们可以进一步打造出包括图灵完整机在内的任意电路。但是,利用这些简单的门构建一台完全成熟的计算机极为困难,因此在这里,我只简单演示一个4位加法器的制作方式。顺带一提,整个实验只需游戏原始版本即可完成,无需任何额外mod或者附加组件。

Tips:所谓4位加法器,指的是能实现四位二进制数全加的数字电路模块。加法器是数字系统中的基本逻辑器件,例如:为了节省资源,减法器和硬件乘法器都可由加法器来构成。但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中,需要注意资源的利用率和进位速度等方面的问题。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。

与其它城市建设游戏一样,《城市:天际线》要求玩家管理城市中的电力与水资源。发电厂负责发电,而城市既需要净水也需要汗水。水塔能够供应净水资源,污水管道则将废物排出城市之外——二者的运行都需要电力的加持。污水管道与净水塔之间的二元性关系,意味着我们可以借此构建与门(AND gates)和或门(OR gates)。

Tips:与门(AND gate)又称“与电路”。是执行“与”运算的基本逻辑门电路。有多个输入端,一个输出端。当所有的输入同时为高电平时,输出才为高电平,否则输出为低电平。

Tips:或门(Or gate)又称“或电路”。如果几个条件中,只要有一个条件得到满足,某事件就会发生,这种关系叫做“或”逻辑关系。具有“或”逻辑关系的电路叫做或门。或门有多个输入端,一个输出端,多输入或门可由多个2输入或门构成。只要输入中有一个为高电平时,输出就为高电平;只有当所有的输入全为低电平时,输出才为低电平。

▲ 图:本次实验中的几位主角,由左至右分别为:燃油发电厂、水塔、污水管道。大家还能在背景中看到风轮机的身影。

下图所示为我们构建起的与门。2个输入端分别为通向水塔(顶部)与污水管道(底部)的电力线路。输出则为连接至发电厂的电力线路。尽管屏幕截图所示的输入值为零——即没有水及废物需要管理,发电厂仍在持续发电,但一段时间后会自行关闭。各建筑物之间相距很远,这是为了避免电力在各位主角之间自由流动。

▲ 图:常规地图上的与门、电力以及水流的分层示意图。

我们还需要另一个具有完整功能的组件:逆变器,或者说非门。为此,我们需要利用游戏中的液体力学模拟机制。滥用水坝、运河或者污水管道会导致建筑物惨遭淹没。被淹没的电厂将不再发电。利用这一游戏设计特性,我们即可构建起非门,如下图所示。

▲ 图:非门电力层,污水管道会先关闭、而后开启。

根据下图中的模式,我们可以使用9个混合门构建出1位加法器。将4个加法器链接起来,我们就实现了本次实验的目标——创建4位加法器。我把各个门放在网格结构当中,以反映其在地图上的布局。

▲ 图:带进位1位加法器的布局。

为了让工作更轻松,我决定在地图编辑器当中使用无限金钱与自定义地图。您可以在地图编辑器当中导入PNG图像以加载高度图。我创建了一个地块,并在其中放置各个门——实际操作起来就像是在设计一块PCB!下图为设计完成的地图,你可以在图片中的2 x 2网格当中找到4个重复的1位加法器。

▲ 图:这里出现了锯齿状的线条,这是因为游戏引擎无法对锐利的边缘进行抗锯齿处理。

构建电路的过程非常繁琐,我也因为计算错误而不得不多次从头来过。我遇到的第一个难题是交叉电路,幸运的是只要有足够的高度差,电源线即可相互交叉而又互不相交。

▲ 图:1位加法器。我将4个加法器互连起来。

最后,我需要在附近建造一座城市以产生充足的污水,从而同时淹没8个风力轮机。没错,这个加法器是用生活污水驱动的。当然,这并不算什么环保解决方案,因为每个门都配备一座燃油发电厂,因此污染其实非常严重。调试过程相当困难,有时候我的电力线路会被风暴和闪电所破坏——这就像是突如其来的宇宙射线,总之相当烦人。

▲ 图:密密麻麻的电源线通向4位输入之一。

我制作了视频,以表明这套系统确实能够有效运行。在第一段视频中(https://youtu.be/dD7Bi25IPaA),我将电线接入始终开启的电网(相当于IC电源)以设置输入。在左侧,我设置了1001(十进制的9),中间为1110(十进制的14)。输入设置完成后,我加快游戏速度,并发现右侧5条线路的输出全部跳转为1。经过很长一段时间后,最终值稳定在10111(十进制的23)。成功了!

在第二段视频中(https://youtu.be/Oa2otcfXCtY),我主要关注其中一个加法器。大家可以看到组件的状态随时间变化,直到出现最终输出结果(总和为0,进位为1)。

写在后面:这台计算机的处理速度非常缓慢,进行一次4位加法运算需要用掉游戏中大约15个月的时间——相当于现实生活中的20分钟左右。另外,尺寸也存在问题。为了在游戏中体现电力供应过程,各个门组件需要彼此相距很远,否则电力会在各门之间瞬间流动。4位加法器占据了正常游戏中全部9个可用区块的大部分面积,当然我也承认其中还有进一步优化的空间。如果使用mod,可用区块可以增加至25个。

0 阅读:2

科技行者

简介:科技行者,一个只谈智能的信息服务平台。