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

好吧,由于某种原因,这似乎无法正常工作,我试图为敌人获得 50 -25 hp。

也宁愿它是一个百分比......像

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

但我喜欢坚持使用整数而不是使用浮点数或双精度数......有人可以帮助我吗?

4

3 回答 3

4

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

使用这个整数近似值:

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

并确保 (Maximum - Minimum ) <= RAND_MAX


或者使用这个更好的浮动:

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;
于 2010-06-05T22:36:43.073 回答
3
int randRange(int a, int b) {return a + rand() % (1+b-a);}

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

于 2010-06-05T22:34:47.300 回答
3

对此进行一些代数:

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

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

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

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

...您可以快速查看问题所在。为什么不使用双打?

于 2010-06-05T22:35:34.443 回答