循环

如果读者曾经学过编程,相信也知道循环对程序是多么重要的了。
通过循环,我们可以为每个实体执行动作,或是执行一些动作到某个条件不成立等等。

这里说的循环是1gt内的循环。我们会使用命令函数。

Foreach——对每个实体循环

对于单一命令,我们可以很简单的使用execute命令。因为execute就是让每个实体执行的,而执行顺序是根据选择器选择玩家的顺序。

不过如果我们需要执行多条命令呢?我们可以使用命令函数和execute命令。

例子

把每个marker(id分数都不同)传送到id分数相同的玩家身上。

首先我们先写一下每个marker应该执行的命令

# tp:match

# 首先检查分数
scoreboard players operation @a id -= @s id
# tp过去0分的玩家那里
# 使用@p是因为你根本不可能tp到一个死人那里...所以就没差了
tp @s @p[score_id_min=0,score_id=0]
# 重置分数
scoreboard players operation @a id += @s id

然后我们可以直接execute所有marker执行这条命令

execute @e[name=marker] ~ ~ ~ function tp:match

就是这样,超级简单的说,不过基本上不用function就无法做到了。

While——当条件成立就一直循环

有时候我们需要循环到某个条件成立/不成立,这时候我们就需要while了。

while简单来说就是当某个条件成立,就一直循环某些命令,直至条件不成立。
我们在命令函数里会使用尾递归的方式,类似函数编程。

例子

生成n个marker。我们把条件设置为

当count >= 1的时候就不停生成marker,每次count -1,直至count < 1 (count = 0)

# util:summon_while

scoreboard players remove @s count 1
summon armor_stand ~ ~ ~ {CustomName:marker}
function util:summon_while if @s[score_count_min=1]

比如说我们要生成两个marker,我们会执行:

scoreboard players set @s count 2
function util:summon_while

第一次调用那命令函数的时候,count会-1,变为1。
由于count >= 1,因此会第二次调用那命令函数

第二次调用的时候,count会-1,变为0。
由于count < 1,因此不会再调用自己,循环停止。

results matching ""

    No results matching ""