用于带变量的c ++的rand()

时间:2010-06-05 22:30:30

标签: c++ srand random

int userHP = 100;
int enemyHP = rand() % ((userHP - 50) - (userHP - 75)) + 1;
好吧,由于某种原因,这似乎没有用,我试图为敌人获得50 -25马力。

也是一个百分比...就像

int enemyHP = rand() % ((userHP / 50%) - (userHP / 75%)) + 1;

但是id喜欢坚持使用整数而不是弄乱花车或双打......有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

获取[最小值,最大值]范围内的随机数:

使用此整数近似值:

int RandomNumber = Minimum + rand() % (Maximum - Minimum + 1);

并确保(最大 - 最小)< = RAND_MAX


或者使用这个更漂亮的浮动:

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;

答案 1 :(得分:3)

int randRange(int a, int b) {return a + rand() % (1+b-a);}

编辑:Thanatos在下面的链接中指出,这种方法可以给出具有统计上差的随机性的数字。出于游戏目的,它可以正常工作,但不要将其用于科学或加密应用程序! (实际上根本不使用rand(),使用像Mersenne twister这样的东西。)

答案 2 :(得分:3)

对此执行一些代数:

rand() % ((userHP - 50) - (userHP - 75)) + 1;

rand() % (userHP - 50 - userHP + 75) + 1;

rand() % (userHP - userHP - 50 + 75) + 1;

rand() % (-50 + 75) + 1;

......你可以很快看到出了什么问题。为什么不使用双打?