第九十一章 红石比较器

(此章节原为『循环装置-牛顿的棺材板快要按不住了啊!!!』,于2022年7月26日改为『红石比较器』)

(此章节有用到本章说来插入图片,因此最好在起点中文网上阅读本章)

现在我们已经了解了很多指令,但是仅仅知道各种指令如何使用,最多也就称得上是一个『会用指令的玩家』而已。那该怎么办呢?我们现在要做的是,将各个指令和游戏特性互相联系起来,这也就是这一卷的主要内容。

红石比较器(redstone parator),你应该知道这是个什么东西吧?作为红石电路的重要组成部分之一,它有许许多多的的用途。

作者的红石并不怎么好,所以这边并不会讲什么特别高深的红石相关内容(我也不会讲)。但基础的一些特性我们还是要了解了解。

让我们拿出一个红石比较器,放在地上,你应该注意到了这东西上面插着三个看起来像是红石火把的东西(其实就是红石火把),并组成了一个三角形(△)。这个三角形的一边平行于红石比较器的一侧,另一头指向另一侧(见插图91-1)。

这个三角形意味着什么呢?让我们换一个方式来看待红石比较器:

(长方形的红石比较器?)

(额,就这样子将就看吧,能够看配图的话那更好)zuqi.org 葡萄小说网

这是一个朝向正北(z-)的红石比较器,这个红石比较器有三个输入口和一个输出口:

a······后侧输入口

b······左侧输入口

c······右侧输入口

o······输出口

其中,a后侧输入口是很重要的一个输入口,你可以向这个输入口输入红石信号。当然,单纯的输入红石信号并不会发生什么事情,因为我们没有在o输出口放置一些能够接收红石信号的东西。让我们在a侧放置一个红石块,o侧放置一个红石粉看看:

亮起来的红石粉

红石块

你会发现o侧的红石粉亮起来了。这是为什么?

因为红石比较器在a侧收到了红石块产生的红石信号,于是就从o侧输出来了。那么问题来了:我们都知道红石信号有强度等级之分,在普通的红石线中传递的红石信号每过一格就会衰减一级,直到完全没有信号。那么红石信号在穿过红石比较器的过程中会发生衰减吗?

由于红石块能够产生出15级的红石信号,因此我们只需要测试o侧输出的红石信号是否为15级即可。我们当然可以通过延长o侧的红石线路,观察红石信号是否传递了15格。但别忘了本书是一个指令教程,因此我们干脆直接用指令对o侧的红石粉进行方块状态测试:

\/execute if block ~~~ minecraft:redstone_wire[power=15]——及之后版本

\/testforblock ~~~ minecraft:redstone_wire [power=15]——

\/testforblock ~~~ minecraft:redstone_wire [“redstone_signal“:15]——基岩版

虽然方块状态我们并没有了解过,但也快了,这边先预习一下也无妨。上面的指令的作用是:探测指令执行地点(也就是你的位置)的方块是否是红石线,且power(redstone_signal)方块状态的值为15。其中,power(redstone_signal)方块状态的作用就是储存该红石粉的红石信号强度等级。

站在o侧的红石粉上,根据你的版本选择性运行上面的指令。如果指令运行成功,那么就代表着这个红石粉具有15级的红石信号,也就验证了我们上述的猜想。那么实际情况怎么样呢?

指令确实运行成功了。

这意味着什么呢?这意味着,红石比较器不会导致红石信号的衰减。但随之而来就有另一个问题——红石比较器会像红石中继器一样增强信号吗?

让我们再测试一下,将上面的结构改成下面这样:

┊——究竟是14级还是15级?

┊——14级红石信号

┊——15级红石信号

图例

┊······红石线

?······红石块

然后还是老样子,对o侧的红石线进行方块状态测试,只需要把『15』改成『14』就行。那么结果如何呢?

指令也是成功运行!

如果你不放心,你还可以重新测试一下『15』的值,然后你就会发现指令执行失败。

所以说,总结下来,红石比较器并不会导致红石信号衰减,也不会增强红石信号。借此原理,红石比较器的第一个重要用途就出来了:

保持信号强度(插图:91-6)

我们上面的讨论都仅仅基于a后侧输入口和o输出口,但红石比较器还有两个输入口:b左侧输入口和c右侧输入口。这两个输入口有什么用呢?

说到这两个输入口,就不得不提——红石比较器的模式。

红石比较器具有两种模式,可以通过观察靠近o输出口的那个红石火把的开关状态来判断此时比较器处于哪种模式:

比较模式——o输出口的红石火把关闭

作差模式——o输出口的红石火把开启

先来讲讲比较模式。当红石比较器处于比较模式时,b或c输入口输入的红石信号强度会和a输入口的红石信号强度作比较,如果b或c>a则o不输出,b或c≤a则o输出,也就是像下面这样子:

┊——0级

┊——14级

┊——15级

∵c=15,a=14

∴c>a

∴o=0(不输出)

——————————

┊——14级

┊——14级

┊——15级

∵c=13,a=14

∴c<a

∴o=14(输出)

懂了吧?需要注意的是,如果b和c都有输入,那么游戏会先比较b和c,拿强度最大的和a比较:

空空┊——15级

空空

空空┊——15级

空空?

∵b=14,c=13

∴b>c

∵a=15

∴b<a

∴o=15(输出)

红石比较器的这个比较模式就是这样,同时这可以引出比较器第二个重要用途:

比较信号强度

当红石比较器靠近o输出口的红石火把开启时,红石比较器就进入了『作差模式』。作差模式的红石比较器会将a输入口的红石信号强度和b或c的红石信号强度相减,并将相减后的红石信号强度从o侧输出:

空空┊——1级

空空

空空┊——15级

空空?

∵b=14,c=13

∴b>c

∵a=15

∴o=a-b=15-14=1(输出)

不难发现,不管是在哪个模式,红石比较器都会先比较b和c输入口的信号强度,将最大的信号强度抽出来之后再操作a输入口的信号强度。

这个『作差模式』也就是这样,同时这也引出比较器第三个重要用途:

信号强度作差

那么比较器就这么讲完了吗?

no,因为红石比较器还有第四个重要用途:

检测方块状态、方块实体和物品展示框

我们知道,红石比较器可以检测命令方块上一次的执行成功次数,然后将次数转化为红石信号强度进行输出。还可以检测许多容器,以及各种东西,然后输出特定的红石信号。对于隔壁红石来说,红石比较器常常用来检测容器内物品数量,甚至是通过不可堆叠和可堆叠的物品不断在漏斗内运动,然后使用红石比较器检测,来达到『随机数运算』的目的。只不过我们这边不需要用到这么复杂的东西(其实那也没多复杂),我们只需要能够用红石比较器检测命令方块的成功次数就行了:

┊——13级

图例

?······命令方块,上次成功运行次数为13次

上面是一个简易的例子——一个上次运行指令成功次数为13次的命令方块,通过比较器成功将成功次数转化为信号强度。

所以这就是本章的全部内容了。

附录:红石比较器历史

java

1.5——加入了红石比较器

1.6——能检测末地传送门框架和炼药锅了

1.8——能检测物品展示框和蛋糕了

1.9——比较器现在能够输入红石块的红石信号

1.14——能检测讲台和堆肥桶

1.15——能检测蜂巢和蜂箱

1.16——能检测重生锚

1.17——能检测幽匿感测体

携带\/基岩版

——加入了红石比较器

1.0.0——可检测末地传送门框架

1.0.5——可检测命令方块

1.1.0——可检测潜影贝

1.2.0——可检测唱片机

1.11.0——可检测烟熏炉、高炉、讲台和堆肥桶

......

......

......

......

我们知道,红石信号等级上限为15,所以当命令方块的执行成功次数等于甚至大于15时,红石比较器就没作用了。

真的吗?

让我们来看一个例子:

┊——6级

图例

?······命令方块,上次执行成功次数为21次

?······红石块

这是一个处于『作差模式』的红石比较器,不难发现它的o=6,c=15。所以它的a为多少呢?

a=o+c=21,也就是命令方块执行成功的次数

等等,不是说好红石信号等级上限为15的吗?怎么跑21去了?

严格来说,并不是说红石信号等级上限为15,而是『红石线的承载能力最大为15级』。所以如果我们不使用红石线,也就不会把命令方块的输出压到15级。

但是不使用红石线我们该怎样传导大于15级的红石信号呢?

用红石比较器。

由于篇幅限制,我们这边就不详细展开,接下来就请你自行研究去吧!

上一章目录+书架下一章