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

わかりました、何らかの理由でこれがうまくいかないようです。私は敵のために 50 -25 hp を得ようとしています。

また、むしろパーセンテージである...のように

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

しかし、私は整数に固執し、フロートやダブルを台無しにしたくない...誰かが私を助けることができますか?

4

3 に答える 3

4

[ Minimum , Maximum ] の範囲内の乱数を取得するには、次のようにします。

次の整数近似を使用します。

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

そして、 (最大 - 最小 ) <= RAND_MAX であることを確認してください


または、このより良いフローティング 1 を使用します。

double RandomNumber = Minimum + rand() * (double)(Maximum - Minimum) / RAND_MAX;
于 2010-06-05T22:36:43.073 に答える
3
int randRange(int a, int b) {return a + rand() % (1+b-a);}

編集: Thanatos は、以下のリンクで、このアプローチでは統計的にランダム性の低い数値が得られる可能性があると指摘しています。ゲーム目的では問題なく動作しますが、科学的または暗号化アプリケーションには使用しないでください! (実際には rand() をまったく使用せず、メルセンヌ ツイスターのようなものを使用してください。)

于 2010-06-05T22:34:47.300 に答える
3

これについていくつかの代数を実行します。

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

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

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

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

...そして、何が問題なのかをすぐに確認できます。ダブルスを使用しないのはなぜですか?

于 2010-06-05T22:35:34.443 に答える