rand () для C++ с переменными

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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


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

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;
int randRange(int a, int b) {return a + rand() % (1+b-a);}

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

Другие вопросы по тегам