(動作保証なし.サポート対象外.)
カードのシャッフル等...どーする?
カードを配る時に, カード番号を乱数によって生成すれば簡単だが, それだと同じカードが重複してしまうことになる. そこで,現実世界でのカードゲームと同様に, カード列をランダムに並べ替えるとよい.
... #include <stdlib.h> #include <time.h> // データ構造 typedef struct { char suit; // S H C D char rank; // A 2 3 4 5 6 7 8 9 0 J Q K // (0 は 10 を意味する,という手抜き) } Card; // カードの初期化(順序良く並べておく) void InitCard(Card *card) { char *suit = "SHCD"; char *rank = "A234567890JQK"; int i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 13; j++) { card->suit = suit[i]; card->rank = rank[j]; card++; } } } // 整数乱数(min 以上,max 以下) int Rand(int min, int max) { return (min + (int)((max - min + 1.0)*rand()/(RAND_MAX + 1.0))); // 正しい乱数の使用方法 // return (min + rand%(max - min + 1)); // 簡易的な乱数の使用方法 } // カードの交換(card[a] と card[b]) void SwapCard(Card *card, int a, int b) { Card tmp; tmp = card[a]; card[a] = card[b]; card[b] = tmp; } // カードのシャッフル(n 回) void Shuffle(Card *card, int n) { int i; for (i = 0; i < n; i++) { SwapCard(card, Rand(0, 51), Rand(0, 51)); } } int Game() { Card card[52] srand(time(NULL)); InitCard(card); Shuffle(card, 100); ... }