查看: 4585|回复: 1

[有事请教] 如何通过变量控制随机数

[复制链接]
梦石
0
星屑
987
在线时间
77 小时
注册时间
2020-5-31
回帖
48
发表于 2021-7-13 23:33:53 | 显示全部楼层 |阅读模式
悬赏1星屑未解决
RPGMV里可以将变量设置为固定范围内的一个随机值,但是如果需要将变量的随机范围用另一个变量控制,该怎么实现呢?
例如我有n张不同的卡,然后我需要抽取其中一张,那么需要设置一个1到n的变量,这样的操作怎么用mv实现呢?求大佬指点。

新作【破碎传说】要素超多的奇幻风RPG作品持续更新中 https://rpg.blue/thread-494102-1-1.html
梦石
0
星屑
1282
在线时间
257 小时
注册时间
2021-2-16
回帖
229
发表于 2021-7-14 03:30:05 | 显示全部楼层
本帖最后由 tuxyin 于 2021-7-17 13:59 编辑

无标题.png
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:如有其他错误或更好的方法还望不吝指出。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部