游戏中电路装置是游戏的特色之一,很多玩家不清楚这些电路装置有哪些技巧,今天小编为大家带来泰拉瑞亚电路装置技巧汇总,希望能够帮助各位玩家。
电路装置技巧
使用故障逻辑门建造触发器
虽然有各种逻辑门可以用来执行基本的逻辑操作,如与门、或门和非门,但是还有另一个逻辑设备可能被一些初学者忽略或低估:故障逻辑灯(故障逻辑门)。
故障逻辑灯的原理相当简单,将灯安放在任何逻辑门(与、或、非、与或、与非、或非)的顶部会改变它输出信号的逻辑,故障逻辑门输出信号的方式是概率性的,这个概率依故障逻辑门和故障逻辑灯之间的亮起的逻辑灯和总共的逻辑灯的数量比值而定。当故障逻辑门和故障逻辑灯之间只有一个逻辑灯时,故障逻辑门就会有0%或100%的概率(也就是是和否)输出信号。
因为这个特性,故障灯门(从现在起我将这么称呼它,其实就是一个故障逻辑门加一个故障逻辑灯组成的最基本的部件)充当一个晶体管(也可看做二极管),可以用来控制信号的传输方向(晶体管或二极管都是单向传输信号)。
然而,故障灯门不仅可以用于简单的晶体管,还可以用来建造触发器。
触发器是一种能够存储状态(值)的逻辑设备。根据接受到的不同输入,不同类型的触发器状态改变的也不同。
我将向您展示的第一个触发器是D触发器(D即为data):
D触发器会保存一个特定值并有两个输入端;第一个输入端(红线)是一个触发器,它将触发器的存储值(绿线)设置为第二个输入(蓝线)的当前值。这样,您可以轻松地存储信息以供之后使用。
这种触发器依靠故障逻辑灯门具有异或门的性质来工作;两个输入端连接到同一个逻辑灯,只有当输入的值(0和1)不同时,灯才会打开。在这里,输入和输出线都连接到逻辑灯上。当这些值不同时触发器将导致输出值变化并与输入值相匹配。
D触发器很容易平铺建造,这使得它可以用单个触发端(信号输入端)存储大量信息:
使用故障逻辑门灯建造SR锁存器
除D触发器之外,另一个有用的触发器装置是SR锁存器(用于置位-复位):
SR锁存器的功能类似于D触发器,但它没有一个触发器端和一个值输入端,而是有两个触发器输入端。一个触发器端(蓝线)用来打开锁存器,而另一个触发器端(红线)用来将其关闭。这是有用的,它使设备在被激活后不能被关闭,除非拉动重置开关。
与D触发器一样,SR锁存器也很容易平铺放置,允许你将一个重置开关连接到多个锁存器上:
使用故障灯门进行移位(递次电路)
在二进制中,移位是一种功能,它可以使一组数据中的每一个位都向左或向右移动。例如,左移00011001一位会产生00110010。注意,在每个数字的左边多加0。这是因为移位的结果可能会根据可用位而改变。在本教程里,我将会在下面的示例中使用8位二进制数(也称为一字节)。
如果一个1在移动时从字节的任何一边掉下来(进位),它就会被舍掉。
在数学上讲,如果不舍掉1,则向左移动一位会使该数字乘以2。右移一位则是将它除以2,如果这个数字在右边有一个1(在这种情况下这个数字是奇数),那么这个1被舍掉,结果被四舍五入,所以00000101(十进制数5)右移一位就是00000010(十进制数2)。
这里有一个左移的例子:
当触发器端(红线)被激活时,每个开启的故障灯门都会关闭自己的逻辑灯,同时打开其左侧的逻辑门灯。要创造一个正确的移位,只需把线接到另一端。通过将最左边的一个位连接到最右边的一个位,从而使由最左边掉下来的“1”不是消失,而是被发送到这个字节的右侧。这就是所谓的向左循环移位:
同理,也可由此建造向右循环移位的电路。
使用累加器建造加法器和计数器
累加器是一个非常有用的装置。它可以存储插入到其中的任何内容的总和。建造累加器要先从上升边缘检测器开始:
上升边缘检测器是一种装置,当输入端从关闭到开启时输出信号。你也可以通过倒置逻辑灯来创建一个下降边缘检测器,它只在输入端从打开到关闭时输出脉冲。如果你将一系列的下降边缘检测器并排放置并从右向左连接,你将得到一个累加器:
当线路被触发时,累加器存储的值以相应位的2的幂值增加。只需将最右边的电线连接到触发器上,就可以将累加器用作计数器。您还可以同时触发多条线路,以使累加器可以增加任意值。注意,如果累加器内的值超过11111111(最大值),则会发生溢出,导致其发生重置。
通过倒置所有的逻辑灯(从而将它们转换为上升边缘检测器),您可以反转累加器,从而使插入到其中的数据被减去。
叠加单一的组件以建造更复杂的装置
在这之前,我们知道了如何建造各种可以在1bit(八个数位)的数位上运行的装置,从D触发器到移位器再到累加器。现在是时候将它们放在一起来建造更完善的装置了。
这可以通过将装置堆建在一个类似架子的结构中,以一种非常紧凑的组件组装方式来完成。
例如,这里有一个D触发器阵列和一个累加器连接在一起:
上面一行是D触发器阵列,下面一行是累加器,摆放的石砖只是为了帮助连接电路。
请注意,看我是如何使用单线传输特定bit的所有信号的。 我本可以用单独一种颜色的电线来做D触发器,而对累加器中的每一位使用另一种颜色的电线连接,但是将同一根电线连接到每一个与一个bit相连接的装置上要容易得多,也更有整齐性。
更换电线颜色也很重要,就像我对蓝线和绿线所做的那样,因为这样可以让两个bit相互连接而不产生干扰。
最后,注意一下如何使用单独的一组红线连接累加器中的D触发器。如果我没有这样做,那么来自D触发器的信号将激活累加器中的下降边缘(沿)触发器。
无论如何,这只是一个如何组合设备的基本例子。在构建更大的设备堆栈时,请记住我提到的规则(每比特一根垂直线、交替的电线颜色和单独的触发器线),因为我将在后面的教程中展示的大多数设备都将使用这些规则。
使用比较器比较数值
比较器是将两个数值作为输入,并确定它们是相等的还是一个值大于另一个值的装置(比较大小)。
要建造一个二进制数值的比较器,需要考虑关于二进制数的两个很明显但是重要的事实: 1大于0;1在较高的地方(即左边)的数值大于1在较低的地方。
知道这些之后, 您可以比较两个二进制数字,方法是从左到右扫描它们,并找到第一个出现在同一位置的两个位不匹配的情况。
例如,00110110大于00110010。
如果您查看每个数字中最左边的位,然后一次向右移动一位,直到找到不匹配的位为止,你就会知道,结果是1的位,就必须是更大的数字。
如果,在比较数字时,没有匹配过一对不同的位,那么你就知道这两个数字是相等的。
下面是使用故障灯门实现此过程的方法:
这个比较器包含一个单比特比较(一行) ,它会触发三个输出端中的一个,从上到下的输出端的情况分别是蓝色=绿色、蓝色>绿色和蓝色<绿色。
如果是单独比较一个位,你可以看到蓝线和绿线的位都连接到顶端的一对故障灯门。如果位不同,这对门将向红线发送信号,如果它们相同则向黄线发送信号,从而继续下一位的比较。
如果位不同,则红线触发一对仅由绿线控制的故障灯门。 如果绿线连接的位关闭,则“蓝色>绿色”的输出端将被触发,因为蓝线连接的位必须打开。 但是,如果绿线连接的位打开,则触发“蓝色<绿色”的输出端。
使用Shift-Add算法来建造一个乘法器
现在你已经知道了如何使用累加器执行二进制加法,现在是使用累加器建造乘法器的时候了。
在二进制中,乘法可以通过两种方式完成。要执行X*Y,只需将X加进累加器Y次,也可以使用更有效的方法:Shift -Add。Shift-Add类似于用手乘十进制数的长乘法方法。在竖式乘法中(就是小学学的那个笔算多位数相乘的方法),把X乘以Y的每一位数字,然后把每一个结果相加在一起即为解(这里不需要多说)。
类似地,使用Shift-Add,扫描Y中的每个位,对于每个数值为1的位,都会将X加到累加器中一次。在每一步之后,左移X以便将其值增加到下一个位置。
Terraria中的乘法器(示例)如下:
正如你所看到的,这是我向你展示的第一个需要一个半砖驱动来操作的装置。这是因为Shift-Add方法需要对每一位都执行一次运算,在这种情况下需要执行8次。
从上到下的第一行表示Y值,第二行表示X值,底部的一行用来保存结果。当左下角开关被激活时,半砖驱动开启并激活产生一次移位,并在每个tick中执行一次操作。在每次操作中,通过右移位从Y值中读取单个位。如果来自Y的一个位的值为1,则黄线触发一组故障灯门,将X的当前值发送到累加器。然后,X值被左移。 请注意,在Y值的右移和X值的左移之间放置了一个额外的故障灯门。 这是为了确保X值在被左移之前会被发送到累加器。 然后,半砖驱动重复这8tick的整个过程,直至完成乘法运算。
使用与门建造多路复用器
在数字电路中,多路复用器是一种使用二进制输入端从一个长值中选择单个位的设备。
例如,可以使用多路复用器从一系列传送器中选择单个传送器以建造传送阵。 多路复用器也可用于将较小的二进制数转换为十进制单数,我将在以后的教程中展示。 这是一个多路复用器,它使用3位的输入端在8个不同的输出端之间进行选择:
当前,二进制输入端的值为0,所以使最底端的火把处于亮起状态。通过输入一个二进制数,其相应的火把将被多路复用器触发。多路复用器使用有分叉结构的与门装置工作。
每两个相邻的垂直的与门,其第一个与门最上面的逻辑灯为关闭状态,第二个与门的逻辑灯为开启状态(可见下图)。 拉动这相应两个与门所属的一列的开关会使这两个灯交换状态。每个与门也从其左边的列中接收一个输入信号。这样,你就可以控制信号从左到右的传输。
你可以很容易地复制和粘贴一个复用器,使它能控制的位数翻倍并且增加输入端的个数。