首页 男生 游戏竞技 Minecraft指令手册

第九十三章 逻辑门 上

Minecraft指令手册 你好MC 3723 2024-07-09 15:29

  (此章节已于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=钻石,tybr /e=item])\\检测半径二米内是否有钻石掉落物\\

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

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

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

  让我们在旁边扔一颗钻石看看:

  ️〇□┠█(插图93-3)

  你会发现红石火把熄灭了。

  这是为什么?因为命令方块检测到了钻石,成功次数大于0,红石比较器将成功次数转化为红石信号后强度也就不等于0,同时转化后的红石信号也被输入到了非门中,也就是非门的R=1。红石火把接受到红石信号后就进入关闭状态,也就是非门的C=0。这样子,我们就成功地将testfor指令的执行结果反转,使得接下来的操作能够加以进行。

  下面是完整版的『钻石生成装置』:

  ️〇A→️┠█!B→C→D→(插图93-4和93-5)

  图例

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

  A→······循环型命令方块,写有『testfor @e[r=2,name=钻石,tybr /e=item]』

  ┠️······红石比较器

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

  !······红石火把(可能是亮也可能是不亮,故这边用感叹号)

  B→······脉冲型命令方块,写有『summon armor_stand diamond 84.47 -60.00 -91.30』

  C→······连锁型命令方块,写有『rebr /laceitem entity @e[name=diamond,tybr /e=armor_stand] slot.weabr /on.mainhand 0 diamond』

  D→······连锁型命令方块,写有『kill @e[tybr /e=armor_stand,name=diamond]』

  整个装置的运行流程如下:

  如果半径2米内有钻石,就

  →啥也不干

  否则,就

  →①生成一个盔甲架

  →②让盔甲架拿着一颗钻石

  →③然后杀死盔甲架,钻石就掉落了

  非常简单是不是?这就是『非门』在指令中的主要用途。只不过随着execute指令的升级,非门也就慢慢地在指令圈中步入了历史。

  ......

  所以逻辑门就这一种?肯定不是。

  接下来我会快速介绍其他的一些门,这些门由于在指令中的使用频率会比非门少很多,我们就不详细讲解。如果你对红石感兴趣,我记得TIS(Trinity Union,中国最厉害的生电服务器,你应该有听说过)他们的B站账号好像有在做红石教程,还有明月庄主好像也有教程。

  与门(AND Gate),翻译成中文就是『当.....和.....都成立时,才会.......』。也就是说,与门是用来判断两个或两个以上的条件,当这些条件都成立时,输出C才会等于1。在编程语言中,与门也就是逻辑运算中的『且』,符号常常使用『&』或『&&』。

  在Minecraft中,与门有N多种做法,这边就列出一个最简单的一种:

  ️◆⊕(这里的拉杆为R1)

  空┊!┈(插图93-6)

  ️️◆⊕(这里的拉杆为R2)

  ┊······红石线,在这边红石线下面要有任意完整方块,使得它和旁边两个红石火把齐平

  ️⊕······一个完整方块上面插着红石火把的结构

  !······C输出用红石火把

  ┈······红石线

  ️◆······R输入用拉杆

  空······空气,没有任何东西

  与门有如下的特性:

  当R1=0 R2=0时 C=0

  当R1=1 R2=0时 C=0

  当R1=0 R2=1时 C=0

  当R1=1 R2=1时 C=1

  也就是说,与门要全部输入都为1时,才会输出1。也就是要所有条件都为真(true)时,才会返回真(true)。

  或门(OR Gate),翻译成中文就是『当......或......中有一个成立时,就......』。也就是说,或门同样也是用来判断两个或两个以上的条件。只不过和与门不一样的是,或门只需要部分条件成立就可以返回真,也就是输出C=1。在编程中,或门也就是逻辑运算中的『或』,符号常常用『|』或『||』来表示。

  或门也有N多种做法,这边也是用最简单的一种:

  ◆┊(这里的拉杆为R1)

  空┊┈(插图93-7)

  ◆┊(这里的拉杆为R2)

  ┊······红石线

  ┈······C输出红石线

  ◆······R输入用拉杆

  空······空气,没有任何东西

  或门有如下的特性:

  当R1=0 R2=0时 C=0

  当R1=1 R2=0时 C=1

  当R1=0 R2=1时 C=1

  当R1=1 R2=1时 C=1

  也就是说,或门只要部分输入为1时,就会输出1。也就是当部分条件为真(true)时,就会返回真(true)。

  这就是本章的全部内容,你会发现其实还是蛮简单的。如果你看不懂,那这边推荐你去找几个红石教程,本书讲红石确实是有点......比较不适合。

目录
设置
手机
书架
书页
评论