本帖最后由 贰逼 于 2015-7-23 16:04 编辑

条件语句
下一页为 !非的概念
条件语句是模块中的一个重要指令
它用于判断事件是否成立
若成立则输出;
若不成立则跳过。


条件语句将会涉及到
execute
  • 条件与变量
  • 相对性

testfor

关于枚举多个条件输出

或|| 与 且&&
  • 或||
  • 且&&
  • 或且结合

!非的表达
  • !非 单个变量
  • !非 多个执行体

条件嵌套
  • 条件嵌套相对性
  • 条件嵌套与变量
  • 子条件detect


全索引链接
上一篇(或|| 与 且&&)--下一篇(条件嵌套)

§3.5 !非
        ?3.5.1 基本概念
下一页为 !非单个变量
在枚举条件的过程中,除了使用或与且来表达外,
还有一个重要的表达方式:!

!表示非,即逻辑关系中的否定含义

那么!=就代表≠

所以在条件判断中,除了能判断符合
还能判断所有不符合

条件1 → 输出1
!条件1 → 输出2
(由于在所有条件就是 符合条件1的 和 不符合条件1的,所以没有其他的选项了)

        ?3.5.2 单个变量
下一页为 !非多个执行体
对于单个变量指的是针对于单个变量的值

例如x=1
那么x!=1代表x的值不为1。

  • !单个范围(选择器自带min/max)
要做到这点,可以灵活运用选择器自带的min/max:
假设说f的a变量值>=1;
那么f的a变量值!>=1就是<1
又因为目前变量储存的数都是整值,
所以也就是<=0













!指令的输出与不输出↑

所以指令:
  1. execute @e[name=f,score_a_min=1]
复制代码

变成:
  1. execute @e[name=f,score_a=0]
复制代码

便完成了一个简单的!。

  • !多个范围(或的枚举)
然而对于!多个范围,
比如准确值10:
  1. execute @e[name=f,score_a_min=10,score_a=10]
复制代码

(a<=10&&a>=10)
不能使用:
execute @e[name=f,score_a=9,score_a_min=11]
(a>=11&&a<=9)
这是一条错误指令,他表示且的关系,而a不可能同时<=11,<=9。

进一步分析两个范围,可以看到是一个或的关系:
a!=10可以表达成:
a>=11或a<=9;

所以得到以下指令:



在所有指令之前模拟fill执行:
  1. /fill ~1 ~ ~ ~4 ~ ~ redstone_block
复制代码

接着按照顺序执行以下指令;
  1. /execute @e[name=f,score_a_min=11] ~ ~ ~ scoreboard players set @e[name=f] b 1
  2. /execute @e[name=f,score_a=9] ~ ~ ~ scoreboard players set @e[name=f] b 1
  3. /execute @e[name=f,score_b_min=1] ~ ~ ~ say 1
  4. /scoreboard players reset @e[name=f] b
复制代码

效果:






1和15都不是10,有输出;
10是10,无输出

分析指令:
已经在中讲解过了;
也就是枚举
a>=11或a<=9

标准格式:






        ?3.5.3 多个执行体
多个执行体指的是针对与多个实体

比如我需要!所有NBT中指定标签
那么就需要寻找拥有指定标签的。

  • 非实体选择器(一般)
做到这点十分简单:
(abcd代表实体,其中a符合条件;x为变量)
a/b/c/d x=1
a reset x
(bcd x=1)
x=1 → 输出
也就是给!的对象去掉标签

例如:
我需要在所有ArmorStand中
说出名字!=f的ArmorStand的名字。



使用以下指令:


在所有指令之前模拟fill执行:
  1. /fill ~1 ~ ~ ~4 ~ ~ redstone_block
复制代码

接着按照顺序执行以下指令;
  1. /scoreboard players set @e[type=ArmorStand] a 1
  2. /scoreboard players reset @e[type=ArmorStand,name=f] a
  3. /execute @e[type=ArmorStand,score_a_min=1] ~ ~ ~ say @e[r=0]
  4. /scoreboard players reset @e[type=ArmorStand] a
复制代码


效果:









通过修改指令中的特殊判断依据,可以达到!此依据的效果

分析指令:
首先给所有对象添加计分板Flag;
然后去掉特殊对象的Flag;
剩下的则都不符合特殊对象;
所以达到!的效果

标准格式:






  • 实体选择器(只有某些分项有这个效果)


其实name=!f有这个效果。

type也是如此:
type=!Player
就是除了玩家外所有实体。


[groupid=546]Command Block Logic[/groupid]