0

私はゲームを作成しており、現在ランダムドロップシステムに取り組んでいます。

アイテムのデザインとなるランダム ID を作成する予定です。createItem 関数に同じ ID を 2 回渡すと、まったく同じアイテムが作成されます。

ともかく。ID を作成するときは、入力を使用して、一部の敵が特定のアイテムをより頻繁にドロップできるようにする予定です。たとえば、関数は次のようになります。

void randID(int level, int diff, float wepChance, float armChance);

関数を呼び出すときに wepChance を 10% (0.1) に設定すると、武器をドロップする確率が 10% になるようにします。rand()この入力をおよび と一緒に使用するにはどうすればよいsrand()ですか? srand は実際にどのように機能しますか (シードを作成する以外には何も見つかりませんでした)。

10% の確率になるように独自のコードを記述できると思いますが、srand を使用して同じ結果を得ることができますか?

4

2 に答える 2

2

srandこれについては役に立ちません。

何かが発生する可能性を 10% にしたい場合は、次のようなものを使用します。

int x = rand();

bool hasOccurred = (x < (RAND_MAX * 0.1));

おそらく正確に 10 で除算されないため、これは正確に10% にはなりませんが、アプリケーションには十分近いと思います。RAND_MAX

于 2012-07-21T09:58:10.627 に答える
0

srand and rand are 'pseudorandom number generator'. srand means 'seed random' and is usually used with 'time(NULL);'

srand(time(NULL)); //Guarantees, that you won't get the exact same row of numbers twice.
rand()%100;        //For example.

Regarding that input problem of yours: It's like rolling a dice. Let's say you assume numbers from 0-99 (%100), you say 'ItemID 1' for results < 10. In this context, that means a chance of 10 %.

rand is not the most reliable random number generator and should not be used for cryptographic issues (since the rows are mathematically predictable), but for games it should work just fine.

Does that help?

Ah yes, speaking in code.

srand(time(NULL));         //Initializes the random number generator. (Call once)
randID(1, 5, 0.1, 0.2);    //Assuming some parameters here

void randID(int level, int diff, float wepChance, float armChance) {        
    int Rand = rand()%100;
    wepChance *= 100;    //Maximum dice roll for a weapon
    armChance = wepChance + (armChance * 100); //Maximum dice roll for an arm.
    if(Rand <= wepChance) //doWeapon
    else if(Rand > WepChance && Rand < armChance) //doArm
}

This is untested and rather crude code, but I think you know what I'm getting at. After all, I don't quite know exactly what you mean to do.

于 2012-07-21T10:03:00.940 に答える