カードを混ぜる

カードを混ぜる

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

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


/* カードを混ぜる */
void shuffle(int *stack) {
  int i;
  int *flag;/* フラグ(0:未使用 1: 使用済) */

  /* 動的領域を確保する */
  flag = (int *)malloc(sizeof(int) * IMAX * NDECK);
  if (flag == NULL) {
    printf("Memory Allocation Error!\n");
    exit(1);/* 異常終了 */
  }

  /* 配列を初期化する */
  for (i = 0; i < IMAX * NDECK; i++) flag[i] = 0;

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

  /* カードを混ぜる */
  for (i = 0; i < IMAX * NDECK; i++) {
    int index;/* カード番号 */

    /* 未使用カードを探す */
    do {
      /* rand は 0 以上 RAND_MAX 以下の整数を返す */
      index = (int)((float)IMAX * NDECK * rand() / (RAND_MAX + 1.0));
    } while (flag[index] != 0);

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

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

  /* 動的領域を解放する */
  free(flag);
}