0

我正在创建一个游戏,我目前正在研究随机掉落系统。

我计划创建一个随机 ID,这反过来又是项目的设计。如果我将相同的 ID 两次传递给 createItem 函数,它应该创建完全相同的项目。

反正。当我创建 ID 时,我计划使用输入来让一些敌人更频繁地掉落某个物品。因此,假设该函数如下所示:

void randID(int level, int diff, float wepChance, float armChance);

如果我在调用函数时将 wepChance 设置为 10% (0.1),我真的希望它有 10% 的几率掉落武器。如何将此输入与 arand()和一起使用srand()?srand 是如何真正起作用的(除了创建种子之外,还没有发现其他任何东西)。

我想我可以编写自己的代码以使其真正成为 10% 的机会,但我可以使用 srand 来达到相同的结果吗?

4

2 回答 2

2

srand不会帮助你。

如果您希望有 10% 的机会发生某事,请使用以下内容:

int x = rand();

bool hasOccurred = (x < (RAND_MAX * 0.1));

这不会正好是10%,因为RAND_MAX可能不会完全除以 10,但我想它对于您的应用程序来说已经足够接近了。

于 2012-07-21T09:58:10.627 回答
0

srand 和 rand 是“伪随机数生成器”。srand 表示“随机种子”,通常与“时间(NULL);”一起使用

srand(time(NULL)); //Guarantees, that you won't get the exact same row of numbers twice.
rand()%100;        //For example.

关于你的那个输入问题:这就像掷骰子。假设您假设数字从 0 到 99 (%100),您说结果 < 10 时为“ItemID 1”。在这种情况下,这意味着 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
}

这是未经测试且相当粗糙的代码,但我想你知道我在做什么。毕竟,我不太清楚你的意思。

于 2012-07-21T10:03:00.940 回答