设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2071|回复: 7
打印 上一主题 下一主题

[有事请教] 用脚本下舍入算随机数,随机范围是否应该+1?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
965
在线时间
63 小时
注册时间
2020-3-7
帖子
41
跳转到指定楼层
1
发表于 2021-7-16 12:17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如题,例如操作变量:#0001测试=Math.floor(Math.random() * ($gameVariables._data[2] - 1) + 1),其中变量2的值为3
假若我要使一个事件的概率为2/3,条件分歧为变量0001测试>1时执行,这样可以吗?还是需要设置变量2的值为4才可以?如果设为4的话,变量1的值会不会随机到4?
求大佬指点!!!      谢谢!!!

Lv4.逐梦者

梦石
0
星屑
7880
在线时间
666 小时
注册时间
2012-7-29
帖子
174
2
发表于 2021-7-16 13:24:44 | 只看该作者
本帖最后由 开关关 于 2021-7-16 13:27 编辑

楼主用的操作变量的式子,会得到一个在[1,3)区间内的整数,也就是1或2,概率各占50%。所以条件设成 #0001测试>1 的效果是事件的概率为1/2。

这些步骤当中,有俩东西我没看懂,一个是取整Math.floor,一个是 - 1) + 1) ,感觉这两个操作没什么必要。

要使一个事件的概率为2/3,我可能会这样做:

1. 操作变量:#0002 = 3
2. 操作变量:#0001测试 = Math.random() * $gameVariables._data[2]   // 这一步得到一个[0,3)区间内的浮点数
3. 条件分歧:#0001测试 < 2 时执行

这样比较直观,看见 #0002 = 3 就知道分母为3,看见 #0001测试 < 2 就知道分子为2。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7089
在线时间
722 小时
注册时间
2021-3-5
帖子
821
3
发表于 2021-7-16 13:26:04 | 只看该作者
Math.random() 是0到1之间的数字,取不到1
因此Math.random()*2 + 1 这个的范围是1到3,取不到3
你再给他floor一下,就变成了1到2了

如果你要概率为1/3的话,那么0001测试>1肯定不行,因为这是1/2的概率(就是只有2才满足条件,1不满足)
你那个变量2是代表什么含义?就是概率的分母吗?如果是的话,那要不你把公式里那个“-1”删掉试试?
这样一来的话,如果[2]是3的话,那么随机结果就是1到3了,然后你写个≤1,也就是只有1才算判定成功,这样就是1/3的概率了

你另一个帖子也是类似的问题,我就不重复粘贴了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
965
在线时间
63 小时
注册时间
2020-3-7
帖子
41
4
 楼主| 发表于 2021-7-17 07:33:24 | 只看该作者
开关关 发表于 2021-7-16 13:24
楼主用的操作变量的式子,会得到一个在[1,3)区间内的整数,也就是1或2,概率各占50%。所以条件设成 #0001测 ...

谢谢大佬!

点评

其实还有个更简单的方法,直接在条件分歧里选择“脚本”,然后写 Math.random() < 2/3 这样连变量都用不到了。_(:з」∠)_  发表于 2021-7-17 13:18
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
965
在线时间
63 小时
注册时间
2020-3-7
帖子
41
5
 楼主| 发表于 2021-7-17 07:34:21 | 只看该作者
RyanYe 发表于 2021-7-16 13:26
Math.random() 是0到1之间的数字,取不到1
因此Math.random()*2 + 1 这个的范围是1到3,取不到3
你再给他fl ...

谢谢大佬!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1282
在线时间
257 小时
注册时间
2021-2-16
帖子
247
6
发表于 2021-7-17 09:56:45 | 只看该作者
本帖最后由 tuxyin 于 2021-7-17 09:59 编辑

我在另一个帖子里面回复过类似的问题,但是那个回复有点问题,返回最小值的概率远低于其他值,所以重新修改了一下。

现在可以参考这个公式(没有基于你的提问,只是提供一种思路):
Math.floor(Math.random() * (maxNum + 1 - minNum)) + minNum
随机返回最小整数minNum至最大整数maxNum间的某个整数,结果包含minNum、maxNum,并且返回每个整数的概率理论上相同。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
965
在线时间
63 小时
注册时间
2020-3-7
帖子
41
7
 楼主| 发表于 2021-7-17 11:29:42 | 只看该作者
tuxyin 发表于 2021-7-17 09:56
我在另一个帖子里面回复过类似的问题,但是那个回复有点问题,返回最小值的概率远低于其他值,所以重新修改 ...

谢谢大佬!
其实我就是看到您那个帖子里的公式然后自以为的推出上面的的
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-14 02:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表