gpt4 book ai didi

c++ - 如何正确开发概率系统?

转载 作者:行者123 更新时间:2023-11-30 05:35:51 24 4
gpt4 key购买 nike

所以我正在开发一款在线游戏,这款游戏的特色之一(与许多其他 MMORPG 一样)是掉落系统和升级系统。

掉落系统决定了怪物被杀死时会掉落哪些元素。升级系统决定元素是否能成功升级到下一级别。

他们都需要能够使用概率来确定:

  1. 元素掉落
  2. 项目升级成功。

我开发了一个系统,可以生成 0 到 100000 之间的随机数。在这个系统中,上述任一情况发生的概率为 1%,用 1000 表示。同样,0.5% 的概率为 500... 50% 将是 50000。

这是这段代码的核心......

int RandomValueInRange(const int start, const int end)
{
std::random_device rd;
std::mt19937 generator(rd());
const int stable_end = ((end < start) ? start : end);
std::uniform_int_distribution<int> distribution(start, stable_end);

return distribution(generator);
}

现在为了确定元素是否成功掉落或升级,我所要做的就是......

const int random_value = RandomValueInRange(0, 100000);
const int probability = item.GetProbability();//This simply returns an integer stored in a config file which represents the probability of this item being dropped/upgraded.
if(random_value <= probability)
{
std::cout << "Probability Success!" << endl;
}
else
{
std::cout << "Probability Failed!" << endl;
}

我希望上述方法有效,但无论出于何种原因,它似乎有问题......玩家能够轻松获得概率为 0.1% 的元素(这几乎永远不会发生!)。

有谁知道更好的系统,或者我如何改进这个系统以真正遵循概率指南....

最佳答案

std::random_device rd;
std::mt19937 generator(rd());
...
return distribution(generator);

我觉得这里有问题,std c++ library 给你统一分布如果你确实重用了 random_device 和 mt19937,但你每次都重新创建它们,这不是应该如何使用它们。将此 std::random_device rd 和此 std::mt19937 以及此 distribution

保存在某处

关于c++ - 如何正确开发概率系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33747258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com