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(), используйте что-то похожее на твистер Мерсенна.)