カードを混ぜる

カードを混ぜる

shuffle は、1 組 52 枚のカードを混ぜる関数です。

rand 関数を利用して 1 組のカードを混ぜています。


/* カードを混ぜる */
void shuffle(int stack[]) {
  int i, imax;
  int index;   /* カード番号 */
  int flag[52];/* フラグ(0:未使用 1: 使用済) */

  /* time 関数により擬似乱数を初期化する */
  srand((unsigned)time(NULL));

  imax = 52;/* 1 組 52 枚のカード */

  /* フラグを初期化する */
  for (i = 0; i < imax; i++) flag[i] = 0;

  /* カードを混ぜる */
  for (i = 0; i < imax; i++) {
    /* 未使用カードを探す */
    do {
      index = (int)((float)imax * rand() / (RAND_MAX + 1.0));
    } while (flag[index] != 0);

    /* カードを設定する */
    stack[i] = index;

    /* フラグを使用済にする */
    flag[index] = 1;
  }
};