#include #include #include #define CARDS 52 /* 難しいのでジョーカー抜き */ typedef struct { /* 1枚のカードの構造体 */ char *suit; /* スート */ int number; /* 数字 */ char *name; /* 読み名 */ } aCard; typedef struct { /* 山、手札などカードの集合体 */ aCard card[CARDS]; /* 単一カードが52枚 */ int n; /* 今何枚あるか */ } Cards; void initialize(Cards *d) /* Cards構造体のポインタ */ { static char *suits[] = { "ハート", "スペード", "ダイヤ", "クラブ", "ジョーカー" }; static char *numbers[] = { "JOKER", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; /* ここまでは initcard2 と同じ*/ int s, n, i; for (i=0; icard がaCard構造体の配列メンバになる。 d->cardは配列なのでd->card[x] でアクセスする。 */ d->card[i].suit=suits[s]; d->card[i].number = n; d->card[i].name = numbers[n]; } d->n = 52; /* この山が持っている枚数をセット */ } void shuffle(Cards *d) { int i, pair; int length=d->n; aCard work; srandom(time(NULL)); for (i=0; icard[i], sizeof work); memcpy(&d->card[i], &d->card[pair], sizeof work); memcpy(&d->card[pair], &work, sizeof work); } } void dispcard(aCard c) { printf("%sの%s\n", c.suit, c.name); } int main(int argc, char *argv[]) { Cards deck, human; int i; initialize(&deck); shuffle(&deck); /* 人間に5枚配る */ for (human.n=0; human.n<5; human.n++) { memcpy(&human.card[human.n], &deck.card[--deck.n], sizeof (aCard)); } puts("あなたの手は"); for (i=0; i