- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我是一名网络游戏开发人员,我遇到了随机数问题。假设一个玩家有 20% 的机会用他的剑造成致命一击。这意味着,五分之一的命中应该是关键的。问题是我在现实生活中得到了非常糟糕的结果——有时玩家在 5 次命中中得到 3 个暴击,有时在 15 次命中中没有。战斗时间很短(3-10 次命中),因此获得良好的随机分布很重要。
目前我使用 PHP mt_rand()
,但我们只是将代码移动到 C++,所以我想在我们游戏的新引擎中解决这个问题。
我不知道解决方案是否是某种统一的随机生成器,或者可能要记住以前的随机状态以强制正确分布。
最佳答案
That means, 1 out of 5 hits should be critical. The problem is I got very bad real life results - sometimes players get 3 crits in 5 hits, sometimes none in 15 hits.
您需要的是 shuffle bag .它解决了真随机对于游戏来说太随机的问题。
算法大概是这样的:你把 1 个重击和 4 个非重击放在一个袋子里。然后你将它们在袋子里的顺序随机化,一次挑出一个。当袋子是空的时,你再次用相同的值填充它并随机化它。这样,您将平均每 5 次命中获得 1 次重击,并且连续最多 2 次重击和 8 次非重击。增加包中元素的数量以获得更多随机性。
这里是 an implementation 的示例(在 Java 中)和 its test cases我前段时间写的。
关于c++ - 需要可预测的随机发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910215/
我是一名优秀的程序员,十分优秀!