AI 速览
系统讲解 Minecraft 记分板命令的运算技巧与实战用法
这篇帖子是记分板运算系列的第三篇,从 objectives 与 players 两类基础操作讲起,介绍了计分项创建、分数设置、虚设目标、随机赋分、检测与显示等命令用法。随后重点展开 operation 运算,涵盖赋值、求和、求差、求积、求商、求余、取大小和交换等符号,并给出清除玩家下线、跨行、排序、缺号、求余、进位、循环交换、二分检测等实战案例。适合已经接触过命令方块、想深入掌握记分板运算的玩家阅读。
论坛附件
帖内链接
获取方式
- 基岩版创建计分项时准则只能选择 dummy
- 记分板只能记录整数,小数运算通常需放大百倍处理
- 虚设目标无法用 @a 选择,需借助 execute 条件代为检测
- operation 对多实体执行时按最近实体先行选择,结果可能不一致
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
【记分板的运算 #3】
scoreboard(记分板)是用于计数的命令,可以较为方便的记录玩家数据。 记分板分为:对"objectives(计分项)"操作和对"players(玩家/目标)"操作两大类。
add是增加、remove是移除。基岩版只能选择"dummy"作为准则。 计分项的的[显示名]可以是空间命名id,会显示对应语言在lang里的文本(item.apple.name=苹果)。 创建"计分项"之后要为"玩家"写入记分:
set即设置<目标>的分数。reset则是重置<目标>的分数,如果[计分项]为空则重置该目标的全部分数。 <目标>不需要指定实体,可以是任意名字,即"虚设目标(伪造玩家名)"。但是在之后不能使用"@a[scores={<计分项>=<数量>]"选择该目标,因为实体不存在。
虚设目标需要充作execute的条件来代为检测。 同理,"@a[scores={<计分项>=<数量>]"不可以选择没有分数的实体,也需要充作execute的条件来代为检测:
代替方法还有:
即为所有目标添加0。没有分数时增加分数默认从零开始增加,所以会将全部没有分数的玩家写为0。 在<目标>填入"*"表示选择全部实体以及全部计分项中有分数的目标。包括"玩家下线"。
random随机赋分,test则是检测分数是否在指定范围内。 test的<最小值>和<最大值>可以填入"*"表示记分板可记录的最小值或最大值。 使用list可以查阅已记录的列表:
scoreboard players list中写入[目标]则显示该目标的全部分数。 使用setdisplay可以将记分板显示出来:
如果[计分项]为空,则清除对应位置。[排序]填入"ascending(顺序)"或"descending(倒序)",默认按倒序。 显示位置
以"#"开头的虚设目标不会被显示。
以<选择器>在<计分项>的分数对<目标>在<目标计分项>的分数进行运算。包括负数运算。 <运算>使用以下运算符号表示:
所有的运算都是对<目标>的分数进行运算,除"><"以外的运算都不改变<选择器>的分数。 【清除"玩家下线"】
将所有玩家的分数保存到另一计分项,然后重置计分项,再从备份中读取记录。有时会遇到reset清除不了的情况,这时候建议直接移除计分项。 【跨行】 ⑦⑧⑨ ④⑤⑥ ①②③ ⓪ 7-4 = 4-1 = 3 如果要上下移动则直接加减3。 【减法选择(已过时)】
选择分数等于"#不定值"的玩家。因为无法获知"#不定值"的准确数值,则使所有玩家减去"#不定值"。如果为0则该玩家的分数与"#不定值"一致。
使用execute可以代替。 【排序】
-1减-1(n-1),即(-1)+(n-1)。(-1)-(-1) = 0,负负得正。 而排序是因为先执行的玩家,减去其他玩家的分数后,自己的分数就不再是"scb=-1"了,不符合后执行玩家的条件。直到最后的玩家只能减去自己的分数,变为0,则完成了排序。 【缺号】
排序之后遇到"玩家下线",需要序号靠后的玩家补上。但是不能获知"玩家下线"的序号,可以比较下线前玩家序号的总分和下线后玩家序号的总分之间的差值,快速算出"玩家下线"的序号。 【求余】
排序之后,求除以特定数值的余数。适合用于分队。 【进位】
十进制乘10进一。 记分板只能记录整数,所以像百分比这样原本属于小数的运算,通常会放大百倍运算。 【循环交换】
使最近的实体由近到远交换所有实体的分数。结果上,会将所有实体的分数向外推一位。
【二分】 在数值存储(计数)中2,4,8,16,32,64,128,256,512..即2的乘方被认为是最简练的记数法。 使一只盔甲架向特定方向移动,并给予距离自己特定范围内的玩家加分,这就是二分法检测坐标。 【关键问题】 operation的关键问题在于单实体对单实体和单实体对多实体的差异上。 而目标选择器选择多实体时,会先行选择最近的实体。因而会造成"单一命令内,由于执行顺序导致的条件变化,使得命令在多目标身上执行呈现出不同结果"的情况。 但是,只要有一个目标执行成功,命令的执行结果就会反馈为成功。这使得有条件的命令方块出现局限性,需要更多命令才能弥补这方面的不足。 |
提升卡
观察者