2010-06-05 37 views
0
int userHP = 100; 
int enemyHP = rand() % ((userHP - 50) - (userHP - 75)) + 1; 

好吧,由於某種原因,這似乎沒有正常工作,即時試圖獲得50 -25馬力的敵人。蘭德()爲變量的C++

也寧願它是百分比......像

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

但我還想堅持使用整數,而不是與浮點或雙精度混亂......有人可以幫助我嗎?

+3

爲什麼你不想惹浮點或雙精度? – cpalmer 2010-06-05 22:33:14

+0

不要忘記接受答案,以表示感謝誰回答你... – Betamoo 2010-06-05 23:21:03

+0

因爲我不知道如何使用雙打和浮動只會使事情變得複雜。我只是想要整數。沒有小數。我會的,我的瘋子偷走了我的筆記本電腦,我沒有在這裏的真實賬戶。 – timothy 2010-06-06 03:56:37

回答

3

在此進行一些代數:

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

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

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

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

...你可以很快看到什麼錯。爲什麼不使用雙打?

3
int randRange(int a, int b) {return a + rand() % (1+b-a);} 

編輯:Thanatos在下面的鏈接中指出,這種方法可以給統計上較差的隨機性數字。爲了遊戲的目的,它可以正常工作,但不要將它用於科學或加密應用程序! (其實不使用蘭特()所有,使用像梅森捻線機。)

+2

請參閱:http://www.eternallyconfuzzled.com/arts/jsw_art_rand.aspx爲什麼這可能不是最佳解決方案。 – Thanatos 2010-06-05 22:40:32

+0

沒錯。但這是一個非常簡單的解決方案,可以在遊戲中設置敵方HP,並且不會像要求的那樣使用浮點。 – user168715 2010-06-05 22:44:43

4

要在範圍內獲得一個隨機數[最小值,最大值]包括:

使用此整型逼近:

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

,並確保(最大值 - 最小值)< = RAND_MAX


或者使用這更好的浮動之一:

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum)/RAND_MAX;