2015-04-10 5 views
1

Привет им ищет RandNum генерировать число между 2-10, а затем это число уводят от 15.C++, разве случайно, но всегда возвращает тот же номер

Прямо сейчас, каждый раз, программа выполнена, номер, взятый с 15, (PerseusHealth) - 7. Как я исправить это и сделать его случайным?

void desertpath() 
{ 
int scorpianchoice; //the option the player chooses. 
int Maxhit = 10; //Max hit the scorpian can do 
int Minhit = 2; //Min hit the scorpian can do 

int randNum = rand()%(Maxhit + Minhit) + Minhit; 
int healthremaining = PerseusHealth - randNum; //health left in option1. 


if(scorpianchoice == 1) 
{ 
    cout << "You run under the Scorpians Legs in hopes to escape " << endl; 
    cout << "You are hit by the scorpians Sting for " << randNum << " hp!"; 
    cout << "You have " << healthremaining << "/15 HP Left!" << endl; 
    cout << "You escape the Scorpian but not without taking some damage" << endl; 
} 
+4

[ 'srand'] (http://en.cppreference.com/w/cpp/numeric/random/srand) для решения немедленная проблема. http://en.cppreference.com/w/cpp/numeric/random для будущего чтения. –

+0

Вызов 'srand' (только один раз) при запуске программы, обычно передавая ему текущее время, например' srand (time (NULL)) '. Еще лучше переключитесь на использование 'std :: mt19936' и' std :: random_device', чтобы выполнить посев. –

+2

В вашем фрагменте вы используете неинициализированную переменную 'scorpianchoice'. –

ответ

4

Используйте srand для инициализации.

srand((unsigned)time(0)); 

Кроме того, я думаю, что вы не поставили скобки правильно:

int randNum = (rand()%(Maxhit - Minhit)) + Minhit; 
+1

и сделайте это Maxhit-Minhit –

+0

@Serverin: Я согласен. Спасибо за указание. –

+0

Благодаря его исправлению: D –

0

Разъяснение на вершине @ ebad86 ответ

  1. RAND() известна плохим качеством, особенно когда используются младшие разряды. Скорее всего, например, вывод всегда генерируется с низким битом, установленным в 1. Простое решение может заключаться в использовании битов из середины последовательности путем смещения битов (например, на 8)

  2. Если максимальный генерируемый вывод rand() не делится на (Maxhit-Minhit), вы получите (слегка) предвзятый результат. Это может быть хорошо для ваших целей, но вы бы лучше знать это

Смежные вопросы