2012-07-21 145 views
0

我正在创建一个游戏,我目前正在研究随机丢弃系统。生成项目和使用srand

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

无论如何。当我创建ID时,我计划使用输入来让某些敌人更频繁地放下某个物品。因此,可以说,该功能看起来像这样的例子:

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

如果我设置wepChance至10%(0.1)当我打电话的功能,我真的希望它是掉落的武器有10%的机会。如何将此输入与rand()srand()一起使用? srand是如何工作的(除此之外没有发现任何东西就是创造种子)。

我想我可以写我自己的代码,使它真的有10%的机会,但我可以使用srand来实现相同的结果吗?

+0

'srand'真的不是这里的答案。 – 2012-07-21 09:56:51

回答

2

srand不会帮助你。

如果你想要的东西有10%的几率出现​​,然后使用类似如下:

int x = rand(); 

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

这会不会是正好 10%,因为RAND_MAX可能不完全除以10 ,但我认为它足够接近您的应用程序。

+0

是的,谢谢我想我可能不得不走这条路去创造它。感谢您的快速回复! – Tallkotten 2012-07-21 10:19:46

+0

在此之前有没有任何理由使用srand? srand不会有所作为吧? – Tallkotten 2012-07-21 10:26:01

+1

@Tallkotten:一般来说,你在整个程序开始时都会调用'srand' ** once **。 – 2012-07-21 10:27:32

0

srand和rand是'伪随机数发生器'。 srand意思是'seed random',通常与'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 
} 

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

+0

你应该添加一个注意,它太频繁地调用'srand'不是一个好主意。如果在调用'srand'之间时间没有改变,后续的'rand'调用将返回相同的值。 – 2012-07-21 10:06:46

+0

啊,是的,谢谢你的信息。其实我有点建议在我的编辑中。但是,真的,谢谢你的头。 – ATaylor 2012-07-21 10:10:37