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

第九十五章 初识逻辑组

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

  (本章原为『随机池-抽奖漏斗』,于2022年7月28日改为『初识逻辑组』)

  (最好在起点中文网上阅读本章)

  在前面四章,我们了解了一些隔壁红石的知识点。但为什么我们要了解那些?因为我们要了解一个在命令圈中可以堪称元老级别的东西:

  逻辑组

  什么是逻辑组?在了解逻辑组是什么之前,我们还得把时间向前拨回到2012年10月25日。就在这一天,Minecraft正式发布了一个对于指令圈有着重大影响的版本:

  Minecraft PC 1.4.2版本(Java版1.4.2)骇人更新正式版

  此次版本中,虽然主打的是『凋零』以及和凋零相关的东西,但有一个重要的方块也在此版本出现。这个方块奠定了接下来几年中整个命令圈的基础。

  这个方块是什么呢?命令方块!

  在Java1.4.2版本中加入的命令方块,和现在的命令方块有很大不同。当时的命令方块只能通过红石激活才能够运行指令,且激活一次只能运行一次,这就导致了当时的命令方块十分依赖于红石电路。因此,直到Java1.9版本更新前,命令方块+红石电路基本上就是当时命令圈的标配(特别是在国内)。而这种使用红石电路将命令方块连起来的组合,就被玩家们称之为:逻辑组

  只不过随着玩家们对游戏机制的深入了解,慢慢地就出现一些不怎么依赖红石电路的命令方块组合,这种方式最初由于较难理解其机制所以在国内使用不广。但随着Java1.9版本的更新,加入了循环和连锁型命令方块,这种方式一下子就成为主流,并延续到现在。这种方式是什么呢?我们暂且不讲,但你大致应该知道是什么,因为我们已经接触过很多次了。

  现在,逻辑组已经不仅仅只有『命令方块+红石电路』一种形式,还有纯命令方块的形式。为了方便区分,本书就将逻辑组按照其形式大致分为三类:

  ①红石逻辑组——单纯使用红石电路将命令方块组合起来的形式

  ②半红石逻辑组——有使用到红石电路,也有使用到其他方式来将命令方块组合起来的形式

  ③纯指令逻辑组——只是通过游戏机制或命令方块本身功能来将命令方块组合起来的形式

  (PS:虽然指令圈内有逻辑组这个叫法,但只有本书是这么分类的)

  这一章,我们主要来了解最古老的逻辑组:红石逻辑组

  不管是什么种类的逻辑组,肯定都可以分为两部分:

  核心——控制以及驱动整个逻辑组运行和更新的部分,按照类型可分为红石驱动和命令方块驱动

  通路——整个逻辑组的附属部分

  比如我们在第九十三章中用来实现生成钻石的那个命令方块组合,其实就是一个逻辑组,有核心和通路两个部分:

  ️〇A→️分界┠█!B→C→D→(插图95-1)

  (更准确的来说,是逻辑组中的半红石逻辑组)

  这个逻辑组的左边部分『️〇A→️』由拉杆和一个重复型命令方块组成。拉杆用于控制整个逻辑组的运行,而重复型命令方块则在被拉杆激活的情况下不断运行以保障整个逻辑组的更新,所以这部分就是这整个逻辑组的核心。而右边部分『┠█!B→C→D→』是在左边部分的驱动下才会激活,是整个逻辑组的附属部分,所以叫做『通路』。

  唉?运行和更新分别是指什么?

  『运行』,也就是字面意思,运行命令方块和红石电路,执行指令嘛。

  『更新』,指的是在一个处于运行状态的逻辑组中,使得逻辑组中的命令方块重新执行指令。

  逻辑组按照运行次数还可以分为两种:

  ①脉冲型逻辑组——不存在更新的概念,每次激活就只运行一次

  ②重复型逻辑组——存在更新的概念,激活后会重复执行直到停止激活

  这就是逻辑组的基本概念。

  『红石逻辑组』可以说是最容易理解的逻辑组。那什么是『红石逻辑组』?

  红石逻辑组,指的是全部通过红石电路,将许多命令方块组合在一起以实现特定功能的逻辑组。这种逻辑组非常依赖于红石电路的控制,所以具有如下的几个特点:

  ①容易控制

  ②执行速度较慢

  ③多采用红石逻辑,容易阅读

  ④占地面积大

  ⑤易受外界影响

  ⑥顶多每秒5次的执行速度

  看起来这缺点很多啊,但这并不妨碍我们了解它,毕竟它可使最简单的逻辑组。

  让我们来看一个例子:

  红石

  脉冲→A»B→C(插图95-2)

  ▦

  图例

  ▦······红石块

  →······红石中继器

  »······红石比较器

  这是一个Java1.6.1版本的红石逻辑组(也是一个重复型逻辑组),还是非常典型的那种。不难发现,这个逻辑组的核心使用了『单刻比较器减法脉冲』来保证整个逻辑组的更新,而红石块就像拉杆一样控制着整个逻辑组的运行。在通路中,使用了红石比较器和中继器来保证执行顺序不会乱,并且有用到一点红石电路的逻辑在里面。那么这个逻辑组有什么用呢?

  其指令如下:

  A······testfor @a[r=5]

  B······scoreboard br /layers add @a[r=5,c=1,x=20,y=4,z=200] count 1

  C······give @a[score_count=5,r=5,x=20,y=4,z=200] 264

  这个逻辑组会检测半径5格内是否有玩家存在,如果有就给这个玩家的count计分项加上1,增加过后如果这名玩家的count计分项分数不超过5,就给予这名玩家一个钻石。

  也就是说,这可以使得每个经过这里的玩家都领到一些钻石,并且每人最多只能领取5颗。但由于红石电路的特性,导致理想很美好,实践起来可能有两个问题:

  ①如果玩家跑得太快,可能导致虽然检测到了,但是并没有给玩家钻石。

  ②如果保护没做好,有些玩家可能会不小心破坏掉红石脉冲,导致逻辑组停止更新

  这就是红石逻辑组。如果你还不清楚,我们再来看一个例子:

  ▨A→B→C(插图95-3)

  图例

  ▨······木制压力板

  →······红石中继器

  这也是一个Java1.6.1版本的红石逻辑组。但它的核心仅仅只有一个压力板来控制运行,并没有更新逻辑组的装置。所以这是一个脉冲型逻辑组,每次进入运行状态仅仅只会执行一次而已。

  它的通路也是使用红石中继器来控制命令方块执行的顺序。那么这个逻辑组有什么用呢?

  其指令如下:

  A······br /laysound mob.villager.yes @br /[x=21,y=4,z=252,r=4]~1 ~1 ~

  B······give @br /[x=21,y=4,z=252,r=4] 32

  C······tell @br /[x=21,y=4,z=252,r=4]你获得了菜鸟的最爱!

  这将会给处于压力板周围4格内的最近玩家(一般是踩着压力板的玩家)一个『枯萎的灌木』,并同时发出村民赞同的声音,告诉玩家『你获得了菜鸟的最爱!』。

  这就是红石逻辑组的基础内容。如果你成功理解了本章的内容,那不妨发挥一下你的想象力,去尝试以红石逻辑组的形式做几个有点用的逻辑组出来,本章到此为止。

  (注:在不同指令教程内『逻辑组』也有可能会有其他的叫法,但总之都是一个东西)

  (此章节有少部分概念和名词来自『指令方块进阶教程——模块(面向过程)』)

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