我有5个班(传奇蛋,稀有蛋,普通蛋,龙食,金).从Item类继承的所有项.
据说,输出是用户正在玩gacha机器,他们可以在那里获得任何这些物品.但我想设定获得特定物品的机会百分比,这样就不会那么容易获得稀有物品.
Legendary Egg = 1%
Rare Egg = 10%
Common Egg = 20%
Dragon Food = 20%
Gold = 29%
Run Code Online (Sandbox Code Playgroud)
有效的方法是什么?我首先将所有项目放在一个数组中并使用rand()%,但我意识到我无法设置获取它们的机会.我想过用类似的东西
if (value < 0.1){
std:: cout << "You got a legendary egg!";
}
Run Code Online (Sandbox Code Playgroud)
但我觉得这样做效率会有点低,因为我被告知要避免阻塞.
*这些项目属于他们自己(单独)的课程,因为他们有不同的能力
小智 7
现代C++方式见
#include <iostream>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> d({1, 10, 20, 20, 29, 20});
std::map<int, int> m;
for(int n=0; n<10000; ++n) {
++m[d(gen)];
}
for(auto p : m) {
std::cout << p.first << " generated " << p.second << " times\n";
}
}
Run Code Online (Sandbox Code Playgroud)
只需打电话d(gen)
即可获得一个具有所需分布的项目(0 ='传奇鸡蛋'等).
注意:值是权重.你谈到了百分比.这应该加起来100,所以我又增加了20%.
归档时间: |
|
查看次数: |
257 次 |
最近记录: |