我正在创建一个游戏,我目前正在研究随机下降系统。
我计划创建一个随机ID,这反过来是一个项目的设计。如果我将相同的ID传递给createItem函数两次,它应该创建完全相同的项。
不管怎么说。当我创建ID时,我计划使用输入,以便能够让一些敌人更频繁地丢弃某个物品。例如,假设函数看起来像这样:
void randID(int level, int diff, float wepChance, float armChance);如果我在调用函数时将wepChance设置为10% (0.1),我真的希望它有10%的概率掉下武器。如何将此输入与rand()和srand()一起使用?srand到底是如何工作的(除了创建一个种子之外,我还没有发现任何其他的东西)。
我想我可以写我自己的代码,使它真正成为10%的机会,但我可以使用srand来实现同样的结果吗?
发布于 2012-07-21 17:58:11
srand在这方面帮不了你。
如果你想要有10%的概率发生某些事情,那么使用下面这样的代码:
int x = rand();
bool hasOccurred = (x < (RAND_MAX * 0.1));这不会恰好是10%,因为RAND_MAX可能不会被10整除,但我想对于您的应用程序来说,它已经足够近了。
发布于 2012-07-21 18:03:01
srand和rand是“伪随机数生成器”。srand的意思是“种子随机”,通常与“time(NULL)”连用;
srand(time(NULL)); //Guarantees, that you won't get the exact same row of numbers twice.
rand()%100; //For example.关于你的输入问题:就像掷骰子一样。假设你的数字是0-99 ( % 100),你说“ItemID 1”表示结果< 10。在这种情况下,这意味着有10 %的概率。
rand不是最可靠的随机数生成器,不应该用于密码问题(因为行在数学上是可预测的),但对于游戏,它应该可以很好地工作。
这有帮助吗?
啊,是的,用代码说话。
srand(time(NULL)); //Initializes the random number generator. (Call once)
randID(1, 5, 0.1, 0.2); //Assuming some parameters here
void randID(int level, int diff, float wepChance, float armChance) {
int Rand = rand()%100;
wepChance *= 100; //Maximum dice roll for a weapon
armChance = wepChance + (armChance * 100); //Maximum dice roll for an arm.
if(Rand <= wepChance) //doWeapon
else if(Rand > WepChance && Rand < armChance) //doArm
}这是未经测试且相当粗糙的代码,但我认为您知道我在说什么。毕竟,我不太清楚你到底想做什么。
https://stackoverflow.com/questions/11591168
复制相似问题