カードを混ぜる

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

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


/* カードを混ぜる */
void shuffle(char stack[52][4]) {
  int i, imax;
  int index;          /* カード番号 */
  char deck[52][4] = {/* 1 組 52 枚のカード */
    "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10",
    "S11", "S12", "S13",
    "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10",
    "H11", "H12", "H13",
    "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10",
    "D11", "D12", "D13",
    "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10",
    "C11", "C12", "C13"
  };

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

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

  /* deck から 1 枚ずつ stack に移動する */
  for (i = 0; i < imax; i++) {
    /* 未使用カードを探す */
    do {
      index = (int)((float)imax * rand() / (RAND_MAX + 1.0));
    } while (deck[index][0] == '\0');

    /* カードを設定する */
    strcpy(stack[i], deck[index]);

    /* 使用済にする */
    deck[index][0] = '\0';
  }
};