지식! 메뉴 바로가기 지식! 내용 바로가기

Highlight navigation

miniDaum navigation

관련 서비스

검색

지식 메인메뉴

다음앱 설치

c언어 카드게임 프로그래밍(소스는 적혀있어요. 주석하고...설명 부탁드려요) 지식머니 50

여름죠아 | 2005-06-13 18:29 | 조회 0 | 답변 1

꼭 좀 도와주세요...시험공부하는건데 모르겠네요...

아래는 카드게임 프로그램입니다.

내용은)
카드가 52장이고 모양은 4가지 hearts,diamonds,clubs,spades이며,
번호는 ace 1부터 10까지이고 jack(11),queen(12),king(13)의 종류가 있습니다.

문제는)
표준입력을 받아 입력한 수만큼의 참가자에게 7장의 카드를 나누어주는 과정을
출력하는것입니다.



[1]그런데 카드게임을 할줄 몰라서 그런지 이해가 안되네요...
설명을 좀 부탁드려요.

[2]그리고 이 코드를 이용해서 확률을 표현할수 있나요?
어떻게 해야하죠?





//헤더파일입니다.

--------------------------------------------------------------------------

#include
#include

enum enumsuit{hearts,diamonds,clubs,spades};
enum enumface{ace,deuce,three,four,five,six,seven,eight,nine,ten,jack,queen,king};

typedef enum enumsuit enumsuit;
typedef enum enumface enumface;

struct card{
enumsuit suit;
enumsuit face;
};
typedef struct card card;

char *strface[]={"ace","deuce","three","four","five","six","seven","eight","nine","ten","jack","queen","king"};
char *strsuit[]={"hearts","diamonds","clubs","spades"};

void filldeck(card *deck);
void shuffle(card *deck);
void deal(card *deck,int cnt);

----------여기까지 헤더파일-----------------------------------------------






//여기부터는 소스

#include
#include "card.h"

int main()
{
card deck[52];
int cnt=2;

filldeck(deck);
shuffle(deck);
printf("카드 게임에 몇사람이 참가합니까?>>");
scanf("%d",&cnt);
printf("n");
deal(deck,cnt);
return 0;
}

void filldeck(card *deck)
{
int i;

for(i=0;i<=51;i++){
deck[i].face=i%13; //1부터 king까지
deck[i].suit=i/13; //hearts에서 spades까지
}
}

void shuffle(card *deck)
{
int i,j;
card temp;

srand(time(NULL));
for(i=0;i<=51;i++){
j=rand()%52;
temp=deck[i];
deck[i]=deck[j];
deck[j]=temp;
}
}

void deal(card *deck,int cnt)
{
int i;
int total=7*cnt;

for(i=0;i printf("%13s-5%d","사람",i+1);
printf("n");

for(i=0;i printf("%5s of %-8s%c",strface[deck[i].face],strsuit[deck[i].suit],(i+1)%cnt ? ' ':'n');
}
이 질문에 답변하시면 지식머니 5, 채택시엔 80 을 더 드립니다.
질문자 채택

꼬마군단 | 답변 19 | 채택률 90%

활동분야 : 해당 분야가 없습니다.
본인소개 : 입력된 정보가 없습니다.

제가 아는한 모든 설명을 해드리겠습니다.

 

------------헤더

#include //아마도 여기에는 card.h가 들어갔을겁니다.


enum enumsuit{hearts,diamonds,clubs,spades}; //enumsuit는 하트 다이아 클럽 스페이드가 있다고 되어있네요.
enum enumface{ace,deuce,three,four,five,six,seven,eight,nine,ten,jack,queen,king};
//enumface는 에이스,2,3,4,5,6,7,8,9,10,잭,퀸,킹 이라고 하네요.
typedef enum enumsuit enumsuit;
typedef enum enumface enumface;

struct card{
enumsuit suit;
enumsuit face;
};
typedef struct card card; .//card라는 함수는 enumsuit suit 변수와 enumsuit face가 있다고 합니다.

char *strface[]={"ace","deuce","three","four","five","six","seven","eight","nine","ten","jack","queen","king"};
char *strsuit[]={"hearts","diamonds","clubs","spades"};
//*strface의 배열에는 숫자가 *strsuit의 배열에는 모양이 들어가 있네요. 
void filldeck(card *deck); //함수선언입니다.
void shuffle(card *deck); //이것도요
void deal(card *deck,int cnt); // 이것도 그렇거요..

----------여기까지 헤더파일-----------------------------------------------






//여기부터는 소스

#include
#include "card.h"

int main()
{
card deck[52];
int cnt=2;

filldeck(deck);//일단은 카드를 넣어야 겠지요. filldeck함수로 이동..
shuffle(deck); //그리고 카드를 섞어야 겠지요. shuffle함수로 이동..
printf("카드 게임에 몇사람이 참가합니까?>>");
scanf("%d",&cnt); //사람수를 받네요.
printf("n"); //그리고 이건 n같습니다. 한줄 띄우는 거죠.
deal(deck,cnt); //deal함수로 이동요..
return 0;
}

void filldeck(card *deck)
{
int i;

for(i=0;i<=51;i++){
deck[i].face=i%13; //1부터 king까지
deck[i].suit=i/13; //hearts에서 spades까지

//차례대로 카드를 집어넣고 있습니다. 1하트 2하트 ........퀸 스페이드 킹 스테이드
}
}

void shuffle(card *deck)
{
int i,j;
card temp;

srand(time(NULL));
for(i=0;i<=51;i++){
j=rand()%52; //j에 무작위로 선출한 52중 하나의 숫자를 넣습니다.
temp=deck[i];
deck[i]=deck[j];
deck[j]=temp;

//그리고는 두개의 카드를 바꾸는 군요,.

}

//이걸 52번 반복하면 잘 섞이겠지요.
}

void deal(card *deck,int cnt)
{
int i;
int total=7*cnt;

for(i=0;i printf("%13s-5%d","사람",i+1); //이건 이해 할수가 없네요. 아무튼 사람수를 출력하고 있네요.
printf("n"); //이것도 오타넹. n로.~!

for(i=0;i printf("%5s of %-8s%c",strface[deck[i].face],strsuit[deck[i].suit],(i+1)%cnt ? ' ':'n'); //이건 카드 모양과 숫자가 나오네요.
}

 

 

여기까지 입니다.

 

허접하지만 조금이라도 도움이 되었으면 합니다

 

-꼬마군단-

2005-06-14 00:32 | 출처 : 본인작성

질문자 한마디

(여름죠아님)
감사합니다.


우측 영역