Dahesor
本帖最后由 Dahesor 于 2021-8-11 13:42 编辑

超/最方便的的随机数生成!

我在写scoreboard的指令教程的时候突然猛醒——这里不是有一个超方便的随机数生成吗?找到了一种,至少在7位数以内有效的方法。
我不卖关子:
1. 如果没有指定生成的实体UUID,他的UUID不是随机的么?
2. 我们不是可以用execute store把UUID导入记分板里么?
那......我们还用什么谓词,用什么战利品表,还用什么...复杂的数据包?
好吧好吧,我不能肯定UUID是真“绝对随机”,但......说真的,你要那么随机干嘛?
而且,逻辑学告诉你,永远无法判断一串数是不是随机的。(笑)
UUID有几位?
说是“4个32位数字”。但测试后,不一定有多长。
一般来说,有个8到10位。
记分板最多也就10位而已。
而“把大数变小”绝对不难。

例:
1. 生成一个随便什么东西,为了方便,我们用盔甲架。再创建一个记分板。
  1. /scoreboard objectives add r dummy
复制代码
  1. /summon armor_stand ~1 ~ ~ {Tags:["random"]}
复制代码
记分板就叫r,盔甲架加了个标签以便管理。
然后用execute store:
  1. /execute store result score @e[tag=random,limit=1] r run data get entity @e[tag=random,limit=1] UUID[0]
复制代码
把大数缩小用记分板求余就好了,一点不难。比如,要一百以内随机数:


  1. /scoreboard players add max 100
复制代码
设定一个叫max的虚拟对象分数为100。
然后使用max对分数求余:
  1. /scoreboard players operation @e[tag=random,limit=1] r %= max r
复制代码

比如190478653输出53

结束
当然,这方法对7位以上大数可能不太好就是了。
所以基本上可以宣布:有关7位数以下的随机器设置————解决了(强迫症患者除外)






wshycaa
另辟蹊径

wmw1939103823
这个指令挺刺激

Dahesor
本帖最后由 Dahesor 于 2021-3-7 13:18 编辑

再次提醒,无法确认UUID的生成是随机的。

而且,由于数位的关系,8位以上大数无效。

1095001319
还有这种操作???

墨柔Morrr
666啊大佬秀

jason_sun
Dahesor 发表于 2021-3-6 13:10
再次提醒,无法UUID的生成是随机的。

而且,由于数位的关系,8位以上大数无效。 ...

可以靠多个UUID相乘即可

第一页 上一页 下一页 最后一页