Project1

标题: 如何通过变量控制随机数 [打印本页]

作者: Aprow    时间: 2021-7-13 23:33
标题: 如何通过变量控制随机数
RPGMV里可以将变量设置为固定范围内的一个随机值,但是如果需要将变量的随机范围用另一个变量控制,该怎么实现呢?
例如我有n张不同的卡,然后我需要抽取其中一张,那么需要设置一个1到n的变量,这样的操作怎么用mv实现呢?求大佬指点。
作者: tuxyin    时间: 2021-7-14 03:30
本帖最后由 tuxyin 于 2021-7-17 13:59 编辑


Math.random()是js原生方法,它直接返回一个0到1(不包含1)的随机数,minNum表示随机最小值,maxNum表示随机最大值。

如果要用RM里面的变量,可以把minNum或maxNum替换成以下语句:
$gameVariables._data[n]
n表示RM变量的编号,第一个编号从1开始

例如,我想获得一个随机数,最小值为8,最大值为2号RM变量的值,可以写作:Math.random() * ($gameVariables._data[2] - 8) + 8

上面计算出来的是浮点数,可以把结果再套一层Math.ceil(),也就是上舍入为整数,最终写作:Math.ceil(Math.random() * ($gameVariables._data[2] - 8) + 8)

因为红色段落中的公式,会导致返回随机最小整数值的概率远低于其他随机整数值,所以修改了一下这个公式:
Math.floor(Math.random() * ($gameVariables._data[2] + 1 - 8)) + 8
现在的返回值,最小为整数8,最大为2号RM变量整数值,所有返回值的随机概率理论上相等。

最后,随机返回指定最小整数(包含)至最大整数(包含)间某个整数的通用伪代码公式为:
Math.floor(Math.random() * (maxNum + 1 - minNum)) + minNum

PS:如有其他错误或更好的方法还望不吝指出。






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1