Skip to content

Latest commit

 

History

History
64 lines (41 loc) · 3.4 KB

File metadata and controls

64 lines (41 loc) · 3.4 KB

第 1 节

本节最后修改于 2022 / 11 / 12

条件判断

条件判断在我的世界指令设计中具有极大的用途。条件判断逻辑一般以两种形式体现在指令中,分别是“有条件的命令方块”和“选择器”。下面分别介绍这两种形式。

  • 有条件命令方块

    对于一个开启的有条件连锁命令方块,如果指向它的命令方块的指令执行成功,则这个命令方块中的指令将会被执行。否则将不会被执行。这是有条件命令方块较为普遍的使用方法。

    # 例子
    # 如果有人背包里有床,就提示“有床啊!”
    
    [~,~,~,~] clear @a bed
    [+,L,+,0] say 有床啊!
    
  • 选择器

    选择器也是条件判断的一种形式,这个判断是对实体的判断:每次选择都可以看作把全部实体挨个判断一次,符合选择器条件就会被选中,否则就不会被选中。

    通常的用法就是通常的用法:选择作用的实体。选择器参数可以使选择更加精准。

    # 例子
    # 我们希望给所有叫做“重工业玉米”的玩家打上“帅比”标签
    # 或者可以换个说法:我们判断一个人叫不叫“重工业玉米”,如果叫,那么打上“帅比”标签。
    
    [~,~,~,~] tag @a[name=重工业玉米] add 帅比
    

    选择器还可以搭配execute指令,用来代替testfor指令搭配有条件命令方块实现的判断。这个用法在以实体为主的指令设计中十分实用——本教程系列就是以实体为主的指令设计。

    # 例子
    # 检测有没有玩家叫“重工业玉米”,如果有,就提示“玉米大人驾到!”
    
    [~,~,~,~] execute @a[name=重工业玉米] ~~~ say 玉米大人驾到!
    

条件判断和逻辑在后面会继续讨论,感兴趣的可以跳跃阅读。

MP过程

条件判断很常用,但过多的条件和过长的指令分支会让构建和维护较为滑稽。在以实体为主的指令设计中,我们可以打标签来“标记”符合条件的实体,通过此标签来进一步操作实体。操作完就删除标签,取消“标记”。这样优点很多,比如可以减少条件判断的数量,降低指令执行中的不可预测性,防止标签泄露,还有愉悦我们的心情之类。

因为我的世界中指令单线程执行,相邻连锁命令方块之间指令的执行几乎没有时间间隔,所以这种方法有一定的封闭性。为了方便,我们可以给这个方法起个名。在本文中,叫做“过程”。一串命令方块,从打上标记到取消标记的部分,可以称作一个“过程”。

为了区分这种我的世界指令的“过程”和其他各种过程,我们可以管这种我的世界指令中的“过程”叫做MP过程,“MP”是“我的世界指令设计模式(Minecraft command design Pattern)”的简写。打上的标记就可以叫MP过程标记

# 例子
# 检测有没有玩家叫做“重工业玉米”,还带着标签“帅比”。如果有,就私聊他“你真帅!”,然后在聊天栏提示“玉米是大帅比”。

[~,~,~,~] tag @a[name=重工业玉米,tag=帅比] add 夸奖-ing //打上过程标记
[+,L,-,0] w @a[tag=夸奖-ing] 你真帅!
[+,L,-,0] execute @a[tag=夸奖-ing] ~~~ say 玉米是大帅比
[+,L,-,0] tag @a[tag=夸奖-ing] remove 夸奖-ing //删除过程标记,结束过程

下一节