rand () для c ++ с переменными - PullRequest
0 голосов
/ 06 июня 2010
int userHP = 100;
int enemyHP = rand() % ((userHP - 50) - (userHP - 75)) + 1;

хорошо, по какой-то причине это не работает, я пытаюсь получить 50-25 л.с. для врагов.

также, скорее, это будет процент ... как

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

но я хотел бы придерживаться целых чисел, а не связываться с числами с плавающей запятой или двойными числами ... кто-то может мне помочь?

Ответы [ 3 ]

4 голосов
/ 06 июня 2010

Чтобы получить случайное число в диапазоне [минимум, максимум] включительно:

Используйте это целочисленное приближение:

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

И убедитесь, что (Максимум - Минимум) <= RAND_MAX <br />

1010 *
*

Или используйте этот лучший плавающий:

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;
3 голосов
/ 06 июня 2010

Выполните некоторую алгебру на этом:

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

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

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

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

... и вы можете быстро увидеть, что происходит не так. Почему бы не использовать двойники?

3 голосов
/ 06 июня 2010
int randRange(int a, int b) {return a + rand() % (1+b-a);}

Редактировать: Танатос указывает в ссылке ниже, что этот подход может дать числа со статистически плохой случайностью.В игровых целях это будет работать просто отлично, но не используйте это для научных или криптографических приложений!(На самом деле вообще не используйте rand (), используйте что-то вроде твистера Мерсенна.)

...