#include<stdio.h>
#include <stdlib.h>
#include <time.h>
struct card
{
int face; //숫자
int suit; //무늬
};
typedef struct card CARD;
void init_deck(CARD arr[]);
void shuffle_deck(CARD arr[]);
void print_card(CARD* c);
void print_deck(CARD arr[]);
void sort(CARD arr[]);
int main()
{
CARD deck[52];
init_deck(deck);
shuffle_deck(deck);
print_deck(deck);
printf("\n");
sort(deck);
print_deck(deck);
printf("\n");
return 0;
}
void init_deck(CARD arr[]) //초기의 카드상태를 출력한다.
{ //숫자 13개, 무늬 4개를 섞어놓는다.
int i, face, suit;
i = 0;
for ( suit = 0; suit < 4; suit++)
{
for ( face = 1; face <= 13; face++)
{
arr[i].suit = suit;
arr[i].face = face;
i++;
}
}
}
void shuffle_deck(CARD arr[]) //숫자 13개와 무늬 4개의 카드를 뒤섞는다.
{ // rand()을 이용해 랜덤으로 뒤섞으면 된다.
int first, second;
CARD s;
srand(time(NULL));
for ( first = 0; first < 52; first++)
{
second = rand() % 52;
s = arr[first];
arr[first] = arr[second];
arr[second] = s;
}
}
void print_card(CARD* c) //숫자와 모양카드들을 출력시킨다.
{
char* faces[] = { "","A","2","3","4","5","6","7","8","9","10","J","Q","K" };
char* suits[] = { "Hearts","Diamond","Clubs","Spades" };
printf("%s-%s \t", faces[c->face], suits[c->suit]);
}
void print_deck(CARD arr[]) //숫자와 모양을 한 벌의 카드로 출력한다.
{
int i;
for ( i = 0; i < 52; i++)
{
print_card(&arr[i]); //print_card() 함수를 이용했다.
if (i % 4 == 3) {
printf("\n");
}
}
}
void sort(CARD arr[]) //첫번째 기준 숫자와 두번째 기준(숫자가 동일할 때) 무늬로 카드를 정렬한다.
{
int i, j, index = 0;
for ( i = 1; i <= 13; i++)
{
for ( j = 0; j < 4; j++)
{
arr[index].face = i;
arr[index].suit = j;
index++;
}
}
}
'C언어 > Homework' 카테고리의 다른 글
[C언어] 구조체 포인터와 배열을 이용한 탐색과 정렬 (0) | 2022.03.28 |
---|---|
[C언어] 묻고 더블로 가! (0) | 2022.03.14 |