int userHP = 100;
int enemyHP = rand() % ((userHP - 50) - (userHP - 75)) + 1;
好吧,由于某种原因,这似乎无法正常工作,我试图为敌人获得 50 -25 hp。
也宁愿它是一个百分比......像
int enemyHP = rand() % ((userHP / 50%) - (userHP / 75%)) + 1;
但我喜欢坚持使用整数而不是使用浮点数或双精度数......有人可以帮助我吗?
要获得 [ 最小值 , 最大值 ] 范围内的随机数:
使用这个整数近似值:
int RandomNumber = Minimum + rand() % (Maximum - Minimum + 1);
并确保 (Maximum - Minimum ) <= RAND_MAX
或者使用这个更好的浮动:
double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;
int randRange(int a, int b) {return a + rand() % (1+b-a);}
编辑:Thanatos 在下面的链接中指出,这种方法可以给出随机性较差的数字。出于游戏目的,它可以正常工作,但不要将其用于科学或密码应用程序!(事实上,根本不要使用 rand(),使用类似 Mersenne twister 的东西。)
对此进行一些代数:
rand() % ((userHP - 50) - (userHP - 75)) + 1;
rand() % (userHP - 50 - userHP + 75) + 1;
rand() % (userHP - userHP - 50 + 75) + 1;
rand() % (-50 + 75) + 1;
...您可以快速查看问题所在。为什么不使用双打?