本帖最后由 贰逼 于 2015-7-24 22:30 编辑

循环语句与条件语句结合
下一页为 时钟概念
本章将前两章内容进行结合,
便是循环体中使用条件语句;
和条件语句中使用循环。

循环语句结合条件语句将会涉及到
循环中条件语句

时钟
  • 建立时钟
  • 时钟中条件语句

结束循环

跳过循环

循环嵌套
  • 判断条件
  • 终止循环

全索引链接
上一篇(循环语句与条件语句结合)--下一篇(结束循环)

§5.2 时钟
下一页为 建立时钟
        5.2.0 概念
                5.2.0.1 基本概念

在上一篇中涉及到了时钟。

时钟究竟是什么,
其实是循环的一类,
它可以当作一个时钟



时钟指:在循环体中含有时序输出的关联指令的循环
时序就是循环体中指令(时钟称节点)必须拥有明确的先后关系

指针:循环顺序,指向的指令得到信号;
次数:指针旋转次数;
节点:关联的指令;
循环:驱动时钟循环的核心。

在之前的例子里,出现了时钟,影响着输出与判断。
(再次可以粗略的理解时钟为顺序

                5.2.0.2 意义
做到时钟前提是有循环体中关联

其二是时序
由于循环就像指针划过的弧,只能朝着一个顺序,又像时间经过了一去不复返,
所以循环中无法做到节点间的跳转,让时钟在一次循环内跳跃,
所以这规定了循环的不可逆性,对于某些相互关联影响条件和输出的指令,只能采用时序。


时钟的影响:
之前的例子里提到了:
先有b=1才有输出,若将其放到后面,
时钟先指向了输出的节点,没有指向b=1,因此没有输出。


        5.2.1 建立
下一页为 始终和条件语句
  • 普通时钟
构建时钟首先要关联,接着是顺序

以下面几条指令:
  1. /scoreboard players add @p[score_a=5] a 1
复制代码

*建立五次循环,使用/scoreboard players set @p a 0开启
  1. /scoreboard players set @p b 1
复制代码

*时钟节点1
  1. /scoreboard players set @p b 0
复制代码

*时钟节点2
  1. /say @e[score_a=5,score_b_min=1]
复制代码

*时钟输出

(1、2有关联)
若时钟节点2在1前面执行:


那么会有输出,因为时钟先得到b=0,最终为b=1,所以有。

若时钟节点1在2前面执行:



那么没有输出,因为时钟先得到b=1,最终为b=0。

  • 默认值时钟
可以将时钟规定默认值
同样是上面的时钟,将时钟节点1设为默认值。

只需要在节点2前面加上特殊条件条件:
  1. /execute @p[score_c_min=1] ~ ~ ~ scoreboard players set @p b 0
复制代码

(c>=1)

注意:默认值时钟必须先指向默认值的节点,再指向特殊值

输出:



全部还原默认,输出默认。


符合特殊,则输出特殊。


附加部分

练习:
  • 建立简易时钟,控制时钟输出/gamerule doDaylightCycle false;
  • 建立默认时钟,默认输出为/weather clear;特殊输出为/weather thunder。


        5.2.1 时钟中的条件语句
为上一篇的引申,讲解如何具体利用时钟
  • 判断事件成立
使用以下指令:(无特殊规定此处是无限循环)


  1. /execute @e[name=f] ~ ~ ~ /execute @p[r=2] ~ ~ ~ scoreboard players set @p a 2
复制代码

*若玩家在f周围2格,设a为2。
  1. /execute @p[score_a_min=1] ~ ~ ~ say 1
复制代码

*a>=1输出
  1. /scoreboard players remove @p[score_a_min=1] a 1
复制代码

*a--

这里构成了时钟,前后关联,保证a根据事件判定有无值

效果:



站在两格以外无输出。


两格以内有输出(对比计分板,可以看到时钟对值的改变情况)

  • 时钟判定轻重关系
依次执行以下指令:
a:
  1. /execute @e[score_a_min=-1] ~ ~ ~ scoreboard players set @p b 1
复制代码

b:
  1. /execute @e[score_a_min=1] ~ ~ ~ scoreboard players set @p b 2
复制代码

c:
  1. /execute @e[score_a_min=10] ~ ~ ~ scoreboard players set @p b 3
复制代码


那么关系是a<b<c,
也就是说若条件都符合,优先选择c,其次b,最后a

效果:







利用时钟时序达到多条件同输出的不同等级关系



附加部分

练习:
  • 判断玩家是否坐在矿车上,若非,输出say 1;
  • 实现对于检测实体名为a,b,c的等级轻重关系,其中a>b>c。


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