记分板操作
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
记分板可用于执行复杂运算,其功能类似于Molang。运算分为两类:数学运算和逻辑运算。
概述
使用/scoreboard players operation
命令执行运算。完整语法如下:
/scoreboard players operation <目标分数> <记分项> <运算符> <源分数> <记分项>
该命令包含两个分数持有者:目标分数和源分数。目标分数是被操作的值,源分数是参与运算的值。运算结果将写入目标分数,源分数的值不会被修改(除交换运算符外)。
数学运算符
数学运算符通过算术运算影响目标分数。共有五种数学运算:加法、减法、乘法、向下取整除法和向下取整模除。
以下示例均假设分数持有者A var
的值为25,B var
的值为10。
加法
运算符:+=
将目标分数与源分数相加,结果存入目标分数。
/scoreboard players operation A var += B var
即A = A + B
,运算结果为25 + 10 = 35
。
减法
运算符:-=
从目标分数中减去源分数,结果存入目标分数。
/scoreboard players operation A var -= B var
即A = A - B
,运算结果为25 - 10 = 15
。
乘法
运算符:*=
将目标分数乘以源分数,结果存入目标分数。
/scoreboard players operation A var *= B var
即A = A * B
,运算结果为25 * 10 = 250
。
向下取整除法
运算符:/=
将目标分数除以源分数,结果向下取整后存入目标分数(由于分数值只能是整数)。
/scoreboard players operation A var /= B var
即A = floor(A / B)
,运算结果为floor(25 / 10) = 2
。
向下取整模除
运算符:%=
将目标分数除以源分数后取余数,结果向下取整后存入目标分数。
/scoreboard players operation A var %= B var
即A = floor(mod(A, B))
,运算结果为floor(mod(25, 10)) = 5
。
逻辑运算符
逻辑运算符使用逻辑门和赋值操作来影响目标分数。共有四种逻辑运算:赋值、最小值、最大值和交换。
同样假设分数持有者A var
的值为25,B var
的值为10。
赋值运算符
运算符:=
将目标分数设置为源分数的值。
/scoreboard players operation A var = B var
即A = B
,运算结果为10
。
最小值运算符
运算符:<
比较两个分数后,将较小值存入目标分数。
/scoreboard players operation A var < B var
即A = min(A, B)
,运算结果为min(25, 10) = 10
。
最大值运算符
运算符:>
比较两个分数后,将较大值存入目标分数。
/scoreboard players operation A var > B var
即A = max(A, B)
,运算结果为max(25, 10) = 25
。
交换运算符
运算符:><
交换目标分数和源分数的值。这是唯一会影响源分数的运算符。
/scoreboard players operation A var >< B var
执行上述命令后,A和B的值将互换:
执行前:A = 10;B = 25;
执行后:A = 25;B = 10;
该操作等效于三步操作:temp = A; A = B; B = temp;
,最终A var = 10
且B var = 25
。
实用案例
检查数值是否相等
若要通过记分板检查两个值是否相等,可将第一个值复制到临时变量,再减去第二个值后比较临时变量是否为0。假设有值A和B:
scoreboard objectives add temp dummy
scoreboard players operation @e temp = @s A
scoreboard players operation @e temp -= @s B
execute @e[scores={temp=0}] ~~~ say A等于B
scoreboard objectives remove temp
记分板初始化
若要将记分板值初始化为0(仅当该值不存在时),可使用scoreboard players add <选择器> <名称> 0
。此命令会在实体不存在该分数时设为0,若已存在则不做任何操作。