第189章 ,/.

(此章节已于2022年7月27日重写)

我们都知道,execute的条件子命令可以是『条件成立即执行』,也可以是『条件不成立才执行』,但是testfor指令就不行了。

假设现在我们要在基岩版实现一个功能:如果以执行地点为中心,半径2米内没有任何的钻石掉落物,就在此处生成一个钻石。

至于怎样生成一个钻石,我们不用管(本章不讨论这个)。现在的问题是,怎样使得半径2米内没有任何钻石掉落物时才会激活用来生成钻石的命令方块呢?

答案很简单:制作一个非门。

非门是什么?在了解非门之前,我们得先了解一个东西:逻辑电路。

逻辑电路(Logic Circuit),简单来说,就是一个你往里面输入一些信号,它就会返回特定信号的电路。比如你往里面输入一个1,它就给你返回0;往里面输入一个0,它就给你返回1。

最基本的逻辑电路被称之为逻辑门(Logic Gate)。逻辑门其实并不是指一个门,它只是一个很简单的红石电路而已。逻辑门有很多种,每种逻辑门都拥有不同的作用。这一章,我们就来了解一些基本的逻辑门。

非门(NOT Gate),又称之为『反相器』,是一种会反转输入信号的逻辑门。它的结构很简单,如下:

?█?(插图93-1)

?······未激活的拉杆(输入)

█······任意完整方块

?······开启的红石火把(输出)

为了方便,我们暂且把拉杆?这边的输入,叫做R,红石火把?这边的输出,叫做C。拉杆按下,R=1,否则R=0。红石火把开启,C=1,否则C=0。

现在的状态是拉杆没有拉下,红石火把开启,也就是:

R=0 C=1

让我们改变一下拉杆的状态,拉下栏杆,然后你就会发现:

〇█

〇······R拉下的拉杆

······C关闭的红石火把

R=1 C=0

整理一下,我们就会发现,当我们给非门输入一个信号时,非门会把这个信号反转。体现在游戏中,就是你拉下拉杆,反倒关闭了红石火把;不拉下拉杆,反倒开启了红石火把。

说了这么多,那么这东西对我们有何帮助?

我们可以把『强度等级大于0的红石信号』视作1,『强度等级为0的红石信号』视为0。testfor指令执行成功后返回的执行成功次数总会是一个大于0的值,红石比较器转化后的强度等级也肯定大于0,也就是输出1。反之,testfor执行失败也就是输出0。看到这个1、0,你想到了什么?

二进制?

非门呐!反转信号啊!我们只需要在输出后面接上一个非门反转一下信号,不就可以实现『testfor执行成功输出0,失败输出1』了吗?让我们来试一试:

?□┠█??(插图93-2)

□······重复型命令方块(testfor @e[r=2,name=钻石,type=item])\\检测半径二米内是否有钻石掉落物\\

┠······R朝向东的红石比较器(比较模式)

?······C开启的红石火把

拉下拉杆,命令方块开始执行,但由于周围并没有钻石,指令执行失败,红石比较器没有输出信号,导致R输入一直为0,C输出自然就一直反转成1,红石火把便一直亮着。