C언어주석(설명)좀달아주세요 블랙잭게임소스인데요..

C언어주석(설명)좀달아주세요 블랙잭게임소스인데요..

작성일 2006.11.27댓글 1건
    게시물 수정 , 삭제는 로그인 필요

블렉잭게임소스인데요  설명좀 달아주세요....도통몬소린질이해를못하겠네요..

 

 



profile_image 익명 작성일 -

//저는 소스의 윗부분에 주석을 달아서 설명할 예정입니다. 글 올리신분의 건승을 바랍

//니다. 프로그래밍을 너무 무섭게 생각하지 마시고, 어렵더라도 차근차근 공부를 하시면

//정말 즐겁고 흥미로운것이 프로그래밍이라고 저는 생각합니다. 화이팅!

 

//이부분은 생략합니다.

#include
#include
#include

 

 

//플레이 도중(실행중) 바뀌는 변수가 아닌 상수(플레이 참여 인원)이기 때문에 #define을

//합니다. const int computer 1;
#define computer 1  
#define user 2
//computer_card, user_card라는 int배열 변수는 이 카드게임에서 컴퓨터가 쥔 패, 유저가 쥔

//패를 기억하기 위한 용도입니다. NOT_USED == -1 , USED==0 라는 상수는 소유한 카드를

//보관하는 배열에 대해 이 위치(행과 열)에 존재하는 카드는 내가 소유했다! 라는 의미로

//쓰여집니다. 즉 0행 0열이 하트2 라면 배열의 0행 0열의 성분이 USED이면 내가 소유한 것

//이고 NOT_USED이면 내가 소유하지 않은것 입니다.


#define NOT_USED -1
#define USED 0

//트럼프 카드를보면 하트,스페이스,다이아,클로버 의 4가지 문양이 있고 각각의 문양들은

// A,2,3,4,5,6,7,8,9,10,J,Q,K 로 이루어져 있습니다. 그것을 모양에 따라 일차적으로 분류하고

//숫자에 따라 이차적으로 분류해서 사용하기 위하여 2차원 배열을 만들었습니다.
int card[4] [13];

//추가 설명하겠습니다. 블랙잭 게임의 룰은 한번에 2장씩 카드를 받게 되며 최대 3번(처음

//받은 횟수 추가) 카드를 교체할 수 있습니다. 컴퓨터와 유저가 3번에 걸쳐 받게되는 2장

//의 카드를 기억하기 위한 배열입니다.
int computer_card[3] [2];
int user_card[3] [2];

//블랙잭 카드게임을 구성하기 위해서 C스타일로 프로그램을 구성하게 된다면 고려하실

//점은 내 게임에서 사용될 데이터는 무엇인가? (위의 예처럼 카드들, 내카드...) 내 게임에

//서 이러한 데이터에 대해 무엇을 행해야 하는가?(카드를 섞고, 나누어주고, 결과를 판정

//하는등(이것들이 함수입니다) ) 즉 내가 만들려는 프로그램에서 데이터와 함수를 추출한

//후에 그것들을 구현하고 또한 구성 해야 하는 것입니다.

 

//아래 함수는 이중 반복문(배열의 행,열단위 제어가 가능합니다)을 통해 배열의 구성원소

//를 위에서 정의해둔 NOT_USED == -1 의 값을 넣어주고 있습니다. 이러한 행동(함수)은

//데이터를 초기화하는 의미를 가집니다. 내가 사용할 데이터를 초기화(제일 처음에 데이

//터가 가져야 할 값으로 만들어 주는것은 매우 중요합니다.)
void shuffle()
{
int i, j;

for(i=0; ifor(j=0; jcomputer_card[i] [j] = NOT_USED;

for(i=0; ifor(j=0; juser_card[i] [j] = NOT_USED;
}

 

//아래 함수는 함수의 이름처럼 카드뭉치에서 게임에 사용할 카드를 분배하는 과정입니

//다. shape라는 변수는 꺼낸 카드의 모양(하트,클로버...)를 기억하는데 사용될 것이고,

//num라는 변수는 그 카드의 숫자를 기억할 것입니다. 

//함수의 매개변수인 int kind == 어떠한 플레이어인지 구분합니다. (컴퓨터 vs 유저)

// int index는 유저 플레이어가 2명인데 그 둘중 하나를 구분하는 변수입니다.

//즉 이함수는 어떤 플레이어가 카드를 달라고 하면 그 플레이어에게 카드뭉치에서 임

//의의 카드를 뽑아서 나누어 주는 역할(함수)을 수행합니다.
void getcard(int kind, int index)
{
int shape, num;

//별로 권장하지 않는 반복문이 사용되었습니다. 또한 반복문의 종료조건 while반복문은

//보통 while(표현식) 표현식 부분이 반복의 종료조건이 되죠

//do == 우선 작업을 처리하고 while == 그것을 종료조건이 될때까지 반복한다.

//shape = rand() %4 라는 표현식을 이해하기 위해서는 rand()라는 함수의 역할을 이해해야

//합니다. rand() 함수는 random == 난수 == 내가 결정하지 않은 임의의 수(양수) 를 리턴

//해주는 역할을 합니다. 그 양수에 대해서 %4 연산을 한다는 의미는 4의 나머지를 구하는

//일을 해줍니다. 수학연산에서 나머지는 정의상 나누는 수보다 작은 수가 나올수 밖에

//없습니다. 즉 0~3 이라는 4개의 숫자가 나오게 되죠. 4개의 숫자중 하나는 shape라는

//변수에 대입됩니다. 즉 임의의 모양을 받는다. 하는 의미가 됩니다. 아래 rand()%13도

//임의의 숫자를 결정하게 됩니다.

//두 작업이 모여서 랜덤한 카드를 하나 결정하게 됩니다.

//코드를 보면 아직 완성된 코드가 아닙니다. 왜냐하면 카드를 분배하는 과정(getcard함수

//의 제어가 논리적으로 연결이 되지 않기 때문입니다. 

 

//우리가 이함수에서 해야할 행동은 해당 플레이어가 소유한 카드(computer_card, user_car

//d 배열) 에 중복되지 않는(카드 더미가 하나이기 때문입니다. 내가 하트2를 가졌다면

//다른 플레이어는 하트2를 가질수 없는 것입니다) 카드를 뽑아내 나누어 주어야합니다. 
do{
shape = rand() % 4;
num= rand() % 13;
}

//모양과 숫자가 결정된 카드이면 해당 플레이어가 카드를 모두 받을때까지 (반복조건입

//니다) 임의의 카드를 결정하고 그것을 플레이어에게 주는 행동이 반복되어야 할 것입니

//다.

//여기 까지 살펴보니 위에서 추측한 유저card배열의 의미가 달라지는군요.

//전체 프로그램의 구성이 제가 추측한 바와 다르군요. 유저 카드배열은 한명의 유저가

//첫회 받은 카드, 두번째 받은 카드를 기억하게 됩니다.

 

//아래는 제가 조금 바꾸어본 코드입니다. 위의 do()코드는 존재 하지 않습니다.

 

//플레이어가 이번턴에 카드 2장을 새로 받을때 까지 반복한다.

//int haveCard = 0;

//while(haveCard 

//{

// 임의의 카드 모양과 숫자를 결정한다.

// shape = rand()%4;

// num = rand()%13;

//나누어주려는 카드가 카드뭉치에서 이미 꺼낸것이 아닌지 확인한다.

//꺼내 줄수 있는 카드라면 나누어 주고 플레이어가 받은 카드개수를 증가시킨다.

//플레이어가 받은 카드를 보관할 장소는 computer_card[3][2] 또는 user_card[3][2]이다.

// [ ][ 0] 에는 카드의 모양이 들어가고  [ ][1]에는 카드의 숫자가 들어갈 것이다.

//if(card[shape][num] == NOT_USED)

//{

//  미안합니다. 수업이 곧 시작할듯 해서 시간이 없네요, 중요 코드옆에 주석만 간단히 붙

//이겠습니다.

 

while(card[shape] [num]
card[shape] [num] = used;

shape++;
num++;
if(num > 10)  //블랙잭에서 J,Q,K,A는 11로 의미된다. 배열을 사용하기 때문에 -1을 해줌.
num = 10;

if(kind==computer)
computer_card[index] [0] = shape;
computer_card[index] [0] = num;
}
else
user_card



}

void showcard()
{
printf("computer : ");

//컴퓨터의 카드배열을 반복하면서 존재하는 카드를 콘솔화면에 찍어준다.
for(i=0; iif(computer_card[i] [0] == not_used)
break; //다음행으로 넘어간다.
printf("[%d , %d] ",
computer_card[i][0], computer_card[i][1];
}
printf("\n");

printf("USER : ");

//아마 judgement의 약자인듯 판정한다. 누구의 카드의 합이 21에 가까운지.
void judge()
{
int computer_sum(), user_sum=0;
int i;

for(i=0; iif(computer_card[i] [1] == NOT_USED)
break;
computer_sum += computer[i] [1]; //컴퓨터의 카드 숫자를 누적한다. 실제 게임하듯 상상해

//보세요

for(i=0; iif(computer_card[i] [1] == NOT_USED)
break;
user_sum += computer[i] [1];
}
if(computer_sum > 21) && (user_sum >21)) { //둘다 21이 넘어가면 둘다패배 == 무승부
if(computer_sum printf(" 게임에서 졌습니다. \n");
else
printf(" 게임에서 이겼습니다. \n");
}
else if(computer_sum > 21)
printf(" 게임에서 이겼습니다. \n");
else if(user_sum >21)
printf(" 게임에서 졌습니다. \n");
else if((computer_sum == 21) && (user_sum == 21))
printf(" 비겼습니다. \n");
else if (computer_sum > user_sum)
printf(" 게임에서 졌습니다. \n");
else
printf(" 게임에서 이겼습니다. \n");
}



void main()
{
char answer;

printf("------------- START the GAME -------------\n");
shuffle(); //카드를 초기화 한다.

//플레이어 (컴퓨터,유저)에게 카드를 분배한다.
getcard(computer, 0);

getcard(user, 0);
getcard(user, 1);

//받은 카드를 콘솔화면에 그려준다.
showcard();

//독특하네요^^; 실제 게임에서는 21에 가깝게 수를 맞추는것이 승리 목표이기 때문에

//21만 초과하지 않고 , 5회 이내에서 카드를 계속 받을수 있습니다. 저역시 위에

//분석할 당시 게임룰을 제대로 떠올리지 못했는듯.
printf("카드를 한 장 더 받겠습니까? (y/n)");
fflush(stdin);
scanf("%c", &answer);

if((answer=='y') || (answer=='y'))
getcard(user, 2);

getcard(computer, 1);

if(computer_card[0] [1] + computer_card[1] [1]) getcard(computer, 2);

showcard();
judge();

printf("------------- GAME OVER -------------\n");
}

//님께 하고싶은 말은 우선 만들려는 무엇인가를 분석해보고 그것을 데이터, 함수로 구분

//한후에 구성해보는 방법으로 연습해보시길 권유합니다.

//굳이 컴퓨터(VC++6.0 등의 IDE)앞에서가 아닌 노트같은 곳에 이러한 연습을 꾸준히

//하시다 보면 실제 사물,현상을 논리적으로 전개해서 컴퓨터에게 그것을 처리해 달라는

//프로그래밍의 재미를 느낄수 있으실 겁니다. 시간이 다 되었습니다. 양해를 바라고

//행복하세요.

c언어 블랙잭 게임 소스 오류

... 씨뿔뿔에이스의 블랙잭 게임에 오신 것을... 다시 입력해주세요."); scanf(" %c", &yn1); } printf("\n플레이어2, 게임을 끝내시겠습니까?(y/n)...

C언어 소스주석좀 달아주세요

주석좀 상세하고 쉽게 달아주시는 분을... 반복문과 조건문 공부하는데 유용한 야구게임... 이렇기 때문에 해당 소스에서는 약간의 편법과 머리를...

c언어 설명&주석 좀 달아주세요

... return 0; } 설명&주석 좀 달아주세요 허허...이거 어디서 많이 본소스네요..하하... 이런식으로 변수를 선언하면 실제로 a변수에는 'c'가...

C언어 소스주석좀 달아주세요

... 자세하게 주석 좀 달아주세요. 내공 30겁니다. 오늘안에 빨리... //위와 동일하기 때문에 구지 설명 드리지 않겠습니다. { long i; if...

C언어 주석좀 달아주세요...

... 하나하나씩 주석좀 자세히 달아주세요 ㅠㅠ 먼저 file1.c 소스입니다. #include "file.h" char choice;... // 외부변수 선언 int main() //설명 필요 없겠죠?...