c 게임 연구중

c로짠  사다리 게임 예제

/*########################################################################

  프로그램명 : 사다리 게임
  파일 : ladder.c
 
########################################################################*/

#include
#include
#include
#include

#define NUMOFLINE 7 // 사다리의 세로줄 수
#define INTERVAL 4 // 사다리의 세로줄 사이의 간격
#define LENGTH 20 // 사다리의 세로 길이

 /*########################################################################
 함수 선언부
########################################################################*/

void GameStart(); // 사다리 게임 시작 화면을 보여주는 함수
void GameInfo(); // 사다리 게임 정보를 보여주는 함수
void InitRawMap(); // 사다리 초기화 함수
void SetRawPoint(); // 사다리의 계단을 놓을 지점을 정하는 함수
void SetLineMap(); // 사다리의 LineMap을 설정하는 함수
int ClimbLadder(int line); // 줄번호를 받아서 사다리를 타는 함수
void ShowMap(); // 사다리를 보여주는 함수

    /*########################################################################
    전역변수 선언부
########################################################################*/

// 사다리 게임의 승자 또는 패자가 될 수 있는 목적지를 결정하는 변수
int Hole = 0;
int Hole_Match = 0;

// 사다리의 계단이 들어갈 지점들
int RawMap[LENGTH][NUMOFLINE - 1];
// 사다리를 어떤 라인으로 그릴지
int LineMap[LENGTH][NUMOFLINE];

// 사다리를 그리기 위한 변수를 배열로 선언
// ◆ : ㅂ 혹은 ㅁ 을 누르고 한자키를 누르면 입력가능
char *Map_Line[] = { " “, “┣”, “┫”, “━”, “┃”, “◆”, “◆”};
// Map_Line과 대응하는 개념에 번호를 설정
enum { BLANK, RIGHT, LEFT, HOR, VER, FLOW_DOWN, FLOW_EDGE};

/*########################################################################
함수 구현부
########################################################################*/

int main()
{
 
 int line; // 사다리 시작점의 라인 번호
 char c; // 사용자의 입력을 받아들일 문자 변수
 
 srand((unsigned)time(NULL));
 // 게임 시작 준비 화면
 while(1)
 {
  GameStart();
  
  c = getch();
  if(c==‘y’||c==‘Y’)
  {
   printf(“이제 게임을 시작하도록 하겠습니다.n”);
   
   Hole = rand()%(NUMOFLINE);
   // 사다리의 계단이 놓일 지점 지정
   SetRawPoint();
   
   // 사다리의 LineMap을 설정하는 함수
   SetLineMap();
   
   printf(“1과 7사이의 숫자를 선택해주세요. 선택한 번호대로 사다리를 타게 됩니다.n”);
   
   // display map
   ShowMap();
   break;
  }
  else if(c==‘q’||c==‘Q’)
  {
   return 1;
  }
 }
 while(1)
 {
  
  c = getch();
  
  line = c - ‘0’;
  
  // 사다리 번호 안의 수가 들어왔을 때
  if(line>=1 && line<=NUMOFLINE)
  {
   printf("%dn”,line–);
   
   Hole_Match = ClimbLadder(line);
   
   ShowMap();
   SetLineMap();
   if (Hole_Match==Hole)
   {
    printf("%d에서 시작한 사람이 당첨!n",line+1);
   }
   else
   {
    printf(“당신은 %d번에서 출발했습니다.n”, line+1);
   }
  }
  
  // 새로운 사다리의 생성
  else if(c==‘n’||c==‘N’)
  {
   Hole = rand()%(NUMOFLINE);
   system(“cls”);
   InitRawMap();
   SetRawPoint();
   SetLineMap();
   ShowMap();
  }
  // 게임 정보 보기
  else if(c==‘i’||c==‘I’)
  {
   GameInfo();
  }
  // 게임 종료
  else if(c==‘q’||c==‘Q’)
  {
   printf(“게임이 끝났습니다.n”);
   break;
  }
  // 잘못된 명령어에 대한 처리
  else
  {
   printf(“잘못된 명령어입니다.n”);
  }
  
  if(c!=‘i’&&c!=‘I’)
  {
   printf("[게임 정보 : i 또는 I] [게임 종료 : q 또는 Q] n");
  }
 }
 
 return 1;
}

/*/////////////////////////////////////////////////////////////////////////
사다리 게임 시작 화면을 보여주는 함수
/////////////////////////////////////////////////////////////////////////*/

void GameStart()
{
 system(“cls”);
 printf(" ***************************** n");
 printf(" * C로 만든 사다리 게임 ^^ * n");
 printf(" ***************************** n");
 
 printf(" ###### 게임 조작 설명 ####### n");
 printf(" # 1. 게임 시작 : y또는 Y # n");
 printf(" # 2. 새 게임 : n 또는 N # n");
 printf(" # 3. 게임 정보 : i 또는 I # n");
 printf(" # 4. 게임 종료 : q 또는 Q # n");
 printf(" ############################# n");
 printf(“n 게임을 시작하시려면 y또는 Y를 눌러주세요.n”);
}

/*/////////////////////////////////////////////////////////////////////////
사다리 게임 정보를 보여주는 함수
/////////////////////////////////////////////////////////////////////////*/

void GameInfo()
{
 system(“cls”);
 printf(" ***************************** n");
 printf(" * 사다리 게임 정보 * n");
 printf(" ***************************** n");
 
 printf(" ###### 게임 조작 설명 ####### n");
 printf(" # 1. 게임 시작 : y또는 Y # n");
 printf(" # 2. 새 게임 : n 또는 N # n");
 printf(" # 3. 게임 정보 : i 또는 I # n");
 printf(" # 4. 게임 종료 : q 또는 Q # n");
 printf(" ############################# n");
 printf(“n 게임으로 다시 돌아가시려면 출발 번호 중 하나를 눌러주세요.n”);
}

/*/////////////////////////////////////////////////////////////////////////
사다리 초기화 함수
/////////////////////////////////////////////////////////////////////////*/

void InitRawMap()
{
 int i,j;
 
 for(i=0; i {
  for(j=0; j   {
   RawMap[i][j] = 0;
  }
 }
}

/*/////////////////////////////////////////////////////////////////////////
사다리 초기화 함수
/////////////////////////////////////////////////////////////////////////*/

void SetRawPoint()
{
 int i,j;
 int count;
 int rand_temp = 0;
 
 // 사다리의 다리가 놓이는 점을 임의로 정합니다.
 for(i=2; i {
  rand_temp = rand() % (NUMOFLINE - 1);
  // 사다리의 다리를 놓을 얖 옆에 이미 놓여진 다리가 없다면
  // 다리를 놓도록 합니다.
  if(RawMap[i][rand_temp-1]==0 && RawMap[i][rand_temp+1]==0)
  {
   RawMap[i][rand_temp] = 1;
  }
 }
 // 사다리의 모든 줄을 검색하여 하나라도 사다리가 그어지지 않은 공간이 있다면
 // 사다리를 만들어주도록 합니다.
 for(j=0;j {
  count = 0;
  for(i=2; i  {
   if(RawMap[i][j] == 1)
   {
    count++;
   }
  }
  rand_temp = rand() % 4;
  if (rand_temp==0)
  {
   rand_temp = 1;
  }
  
  if(count==0)
  {
   for (i=2;i   {
    if((RawMap[i][j-1]==0 && RawMap[i][j+1]==0))
    {
     RawMap[i][j] = 1;
    }
   }
  }
 }
}

/*/////////////////////////////////////////////////////////////////////////
사다리의 계단을 놓을 지점을 정하는 함수
/////////////////////////////////////////////////////////////////////////*/

void SetLineMap()
{
 int i, j;
 
 // 사다리의 줄기에 대한 정보를 입력하기 위한 루프
 for(i=0; i {
  for(j=0; j  {
   LineMap[i][j] = VER;
  }
 }
 // 사다리의 다리에 대한 정보를 입력하기 위한 루프
 for(i=0; i {
  for(j=0; j  {
   if(RawMap[i][j]==1)
   {
    LineMap[i][j] = RIGHT;
    LineMap[i][j+1] = LEFT;
   }
  }
 }
}

/*/////////////////////////////////////////////////////////////////////////
줄번호를 받아서 사다리를 타는 함수
/////////////////////////////////////////////////////////////////////////*/

int ClimbLadder(int line)
{
 int i;
 
 for(i=0; i {
  switch(LineMap[i][line])
  {
  case RIGHT:
   LineMap[i][line++] = FLOW_EDGE;
   LineMap[i][line] = FLOW_DOWN;
   break;
  case LEFT:
   LineMap[i][line–] = FLOW_DOWN;
   LineMap[i][line] = FLOW_EDGE;
   break;
  default:
   LineMap[i][line] = FLOW_DOWN;
  }
 }
 return line;
}

/*/////////////////////////////////////////////////////////////////////////
사다리를 보여주는 함수
/////////////////////////////////////////////////////////////////////////*/

void ShowMap()
{
 // 루프 변수
 int i, j, k, stair;
 
 stair=BLANK;
 // 사다리 시작 번호를 나타내는 루프
 for(i=0; i {
  printf(" %d", i+1);
  
  for(k=0; k  {
   printf("%s", Map_Line[stair]);
  }
 }
 
 printf(“n”);
 
 // 사다리 본체를 그리는 루프
 for(i=0; i {
  for(j=0; j  {
   printf("%s", Map_Line[LineMap[i][j]]);
   
   stair=BLANK;
   
   if(LineMap[i][j]==RIGHT)
   {
    stair=HOR;
   }
   if(LineMap[i][j]==FLOW_EDGE)
   {
    stair=FLOW_EDGE;
   }
   
   for(k=0; k   {
    printf("%s", Map_Line[stair]);
   }
  }
  printf(“n”);
 }
 // 사다리 목적지를 나타내는 루프
 for(i=0; i {
  if(i==Hole)
  {
   printf(" X");
  }
  else
  {
   printf("

Hugo로 만듦
JimmyStack 테마 사용 중