建造
废品机械师 逻辑门完全指南:六种门真值表与常用电路
六种逻辑门的游戏内原文规则、两输入与三输入真值表,以及非门、记忆位、时钟和流水灯的接线做法。三输入时异或和同或不再互为反面,这一点最容易踩坑。
逻辑门到底在读什么
逻辑门只做一件事:把所有接进来的东西看一遍,套用一条规则,然后决定自己是亮还是灭。从它接出去的部件看到的就是这个结果,门与门就是这样串起来的。
游戏把输入叫“触发器”,范围比开关大得多。开关、按钮、传感器、另一个逻辑门、定时器、座椅,都能接进来。门不区分它们是什么,只数当前有几个是激活的。
对着放好的门按 E 就能换模式,一共六种,分成基础和反转两组。换模式不花钱也不会断线,所以一个电路不对,往往只差改一次模式。
六种模式的游戏原文规则
每种模式在菜单里都带一句说明。这几句要按字面读,因为其中两条和课本上的定义并不一样:
- AND:当所有关联触发器激活后方可启用
- OR:当任意关联触发器激活后方可启用
- XOR:当只有一个关联触发器激活时方可启用
- NAND:当任意关联触发器未激活时方可启用
- NOR:当所有关联触发器未激活时方可启用
- XNOR:当已激活的关联触发器为偶数时方可启用
注意每条规则数的都是“有几个输入激活”,没有一条是专门为两个输入写的。接上第三根线,差别就出来了。
两个输入
两个输入时,六种模式和常见的逻辑门表现一致。
| A | B | AND | OR | XOR | NAND | NOR | XNOR |
|---|---|---|---|---|---|---|---|
| 灭 | 灭 | 灭 | 灭 | 灭 | 亮 | 亮 | 亮 |
| 亮 | 灭 | 灭 | 亮 | 亮 | 亮 | 灭 | 灭 |
| 灭 | 亮 | 灭 | 亮 | 亮 | 亮 | 灭 | 灭 |
| 亮 | 亮 | 亮 | 亮 | 灭 | 灭 | 灭 | 亮 |
平时用得最多的是 AND 和 OR。NAND 和 NOR 是它们的反面,而“会取反”这件事正是做非门的关键。
三个输入时,XOR 和 XNOR 就分家了
接上第三个输入,规则就和课本对不上了。这里的 XOR 是“只有一个输入激活时才亮”,不是奇数个亮就亮;XNOR 是“激活数量为偶数时亮”,而 0 也算偶数。
| 激活输入数(共 3 个) | AND | OR | XOR | NAND | NOR | XNOR |
|---|---|---|---|---|---|---|
| 0 个 | 灭 | 灭 | 灭 | 亮 | 亮 | 亮 |
| 1 个 | 灭 | 亮 | 亮 | 亮 | 灭 | 灭 |
| 2 个 | 灭 | 亮 | 灭 | 亮 | 灭 | 亮 |
| 3 个 | 亮 | 亮 | 灭 | 灭 | 灭 | 灭 |
看最后一行:三个全亮时,XOR 灭,XNOR 也灭,所以超过两个输入之后它们不再互为反面。如果你用 XOR 拼过三路开关,然后发现某一种组合怎么都不对,原因就在这一行。
实用结论:XOR 是“有且只有一个”检测器,XNOR 是奇偶校验。除非你要的就是“恰好一个”,否则让 XOR 保持两个输入。
时序、tick 与定时器
游戏世界每秒推进 40 个 tick,定时器数的就是这个单位。打开定时器会看到两个滑条,一个是秒,一个是 tick,所以最短能设到 1 个 tick。
定时器做的是延迟转发:信号变亮,它过一段时间才变亮;信号变灭,这个“灭”同样要走完延迟。很多人栽在后半句上,定时器是延迟线,不是单次脉冲。
门本身的响应很快,所以一般可以把一串门当作瞬时,只在有定时器的地方算时间。真正需要注意的是回环:把门的输出接回它自己的输入,它永远稳定不下来,会一直翻转,这就是游戏里最快的振荡器,通常快到没法用。要做出看得见的节奏,就得在回环里加一个定时器。
值得照抄的几个电路
下面这些是建议做法,游戏并没有规定必须这么接。用到的部件上面都讲过,边搭边对照真值表就能验证。
非门
游戏里没有 NOT 部件,得自己做。把一个门设成 NAND,只给它接一个输入。规则是“任意关联触发器未激活时方可启用”,只有一个输入时,就等于输入灭它才亮。NOR 只接一个输入效果一样。
这是整个游戏里复用最多的技巧,凡是攻略说“把信号取反”,指的都是它。
只有总闸打开才生效的开关
把总开关和实际要按的按钮一起接进一个 AND 门,只有两者都激活门才亮,总开关就变成了保险。再把 AND 门的输出接到原来要驱动的部件上。
想让副驾驶在停车时按不动推进器,这是最省事的办法。
记忆位
记忆位的效果是:按一下置位键,松手之后它还亮着;按一下复位键,松手之后它还灭着。要三个门:
- 第一个门设成 OR,输入是置位按钮和第二个门的输出。
- 第二个门设成 AND,输入是第一个门的输出和第三个门的输出。
- 第三个门设成 NAND,只接复位按钮,相当于一个非门。
状态从第二个门读。按下置位,第一个门亮,第二个门跟着亮,再反馈回第一个门,松手之后靠这条反馈自己保持。按下复位,第三个门灭,第二个门跟着灭,反馈断掉,整个回环落回灭。
时钟
拿一个只接一个输入的 NAND 当非门,把它的输出接进定时器,再把定时器的输出接回这个 NAND。信号翻转、等完延迟、再翻转。一个完整的亮灭周期是两倍延迟,所以定时器设 1 秒,周期就是 2 秒。
把 NAND 的输出接到灯上就是闪光灯,接到活塞上就是一台停不下来的机器。
流水灯
这次串定时器而不是串门。开关接第一个定时器,第一个定时器同时接一盏灯和第二个定时器,依此类推。每个定时器都要先走完自己的延迟才把信号传下去,灯就会顺着链条一盏盏亮起来,关掉开关时再按同样顺序熄灭。
想要匀速就把每个定时器设成一样的短延迟,想让它越到后面越慢,就把靠后的延迟调长。
这些部件多少钱
都不贵。一个逻辑门就是一块金属块、一块电路板加一份胶水:
- 逻辑门:1 级金属块 1 个、电路板 1 个、胶水 1 份,在锻造机器人上 5 秒。可叠 10 个。
- 定时器:1 级金属块 2 个、电路板 4 个、胶水 1 份,10 秒。可叠 5 个,而且占两格而不是一格。
- 开关:1 级金属块 1 个加电路板 1 个,或者在工作台上用 5 个废品金属块加 1 个电路板。
- 按钮:1 级金属块 1 个加电路板 1 个。
逻辑门和定时器在藏身处也能换,各 1 个笼中农夫。在还搓不出成批电路板的阶段,这条路值得记住。
真正的成本是电路板。一个定时器要 4 个,一整面定时器墙很快就吃光库存,动手前用制造规划器把整块控制面板的量算出来,比事后补石英省事。
逻辑门常见问题
游戏里有非门吗?
没有单独的 NOT 部件。把 NAND 或 NOR 只接一个输入就是非门,两者的规则都等价于“输入灭时才亮”。
为什么接了三个输入之后 XOR 就不对了?
因为游戏里的 XOR 是“当只有一个关联触发器激活时方可启用”,不是奇偶规则。三个输入全亮时 XOR 是灭的。把输入拆到两个门上,或者你要的其实是奇偶校验,那就改用 XNOR。
逻辑门跑得多快?
世界每秒更新 40 次,这也是定时器能设的最小步长。把门的输出接回自己的输入,它不会稳定下来而是持续翻转,所以自反馈的门是个极快的振荡器,要减速就得在回环里加定时器。
定时器能做出短脉冲吗?
单独不能。定时器对“亮”和“灭”一视同仁地延迟,持续信号进去还是持续信号出来。要脉冲就把原信号和它自己的“取反并延迟”版本一起接进 AND 门,两者只在延迟长度内重叠。
什么东西能接进逻辑门?
任何有亮灭状态的部件:开关、按钮、传感器、座椅、定时器,或者另一个逻辑门。门只数其中有几个是激活的然后套规则,不管信号是谁产生的。