ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

乱数のダメな使い方

http://cri-ch.tv/iwai/52288.html
乱数の使い方が駄目な例が紹介されている。
じゃあ、どうコードを書くのが正しいのかといわれると、なかなか良い方法を思いつかない。
思いついたのは、配列に順番に値を入れて、配列の中身を適当な回数入れ替えるというもの。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int box[100];

    // 0-99を順番にセット
    for(int i=0; i<100; i++)
    {
        box[i] = i;
    }

    for(int i=0; i<100; i++)
    {
        // ランダムで2か所選んで入れ替える
        int pos1 = rand()%100;
        int pos2 = rand()%100;

        int temp = box[pos1];
        box[pos1] = box[pos2];
        box[pos2] = temp;
    }

    // 結果表示
    for(int i=0; i<100; i++)
    {
        printf("%2d ", box[i]);
    }
    printf("\n");
}

ただ、どのくらい入れ替えることを繰り返せば、十分にランダムといえるんだろう。とりあえず上の場合は100回繰り返している。
他に考えたのは順番に入れた配列から取り出して、空いた部分を詰めていくというもの。でもこれだと配列の領域が二ついるし、空きを詰めるコストがかかる。
どうも乱数を扱う処理は苦手。