본문 바로가기
프로그램/C언어 1000제

C언어 133제] 게임 프로젝트 1. 두뇌 개발 프로젝트 Ver 0.3

by 건티 2022. 3. 22.
728x90

출처 : 반크_세계유산 석굴암

 

문제]

1단계는 이항식으로 더하기.

2단계는 삼항식으로 더하기.

3단계는 사항식으로 더하기.

4단계는 오항식으로 더하기.

4단계후 난이도는 10씩 숫자를 증가할 수 있도록 한다.

매 문제는 같은 위치에서 나올 수 있도록 한다.

단계마다 5개의 문제를 맞추면 다음 단계로 진행여부를 물어본다.

작업이 끝나면 화면을 깨끗이하고 결과를 기준으로 능력자 여부를 출력한다.

능력자는 문제를 다 맞추었거나 난이도가 100을 넘으면 능력자로 인정한다.

 

프로그램]

//Dev-C++ 5.11로 작업함.
//두뇌 개발 프로그램 Ver 0.2
//더하기 게임 
//반복문, 배열, 함수를 활용하기 
#include <stdio.h>
#include <stdlib.h> //srand(), rand()
#include <time.h> //time()
#include <windows.h>//SetConsoleCursorPosition(),GetStdHandle(), COORD

//커서 위치 함수 
void gotoxy(int x, int y)
{
   COORD Pos={x,y};
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}

//지우기 함수
void Clear(int y1, int y2, int y3)
{
   gotoxy(10,y1); printf("                                          ");
   gotoxy(10,y2); printf("                                          ");
   gotoxy(10,y3); printf("                                          ");


//문제를 출력한다.
void Question_Print(int *R,int n)
{
   int i;
   for(i=0;i<=n;i++)
      if(i<n) printf("%d + ",R[i]);
      else printf("%d = ",R[i]);
}

int main()
{
   int arr[5]={0};//문제 발생 변수
   int player_answer;//문제에 대한 정답변수
   int Result;//발생 문제의 정답변수 
   int count;//stage별 맞춘 개수 변수
   int total_count;//전체 문제를 세는 변수 
   int win;//맞춘개수 변수 
   int stage, stageN;//게임의 단계를 체크하는 변수
   int N;//문제의 난이도를 결정하는 변수 
   int i;//반복변수, 인덱스 변수 
   char ch;//게임 계속여부를 결정하는 변수
   char Name[20];//게임어의 이름을 입력하는 변수 


   //무작위로 문제를 발생할 수 있도록 초기값 설정
   srand(time(NULL));

   gotoxy(10,0); printf("[ 남녀노소 누구나 두뇌 개발 프로젝트! ]");
   gotoxy(10,1); printf(" === 더하기 게임을 시작합니다. === ");

   gotoxy(10,3); printf("Player의 이름을 입력하여 주세요 : ");
   gets(Name);

   //2초를 기다린다.
   gotoxy(10,5); printf("문제를 읽어오고 있습니다.");
   gotoxy(10,7); 
   for(i=1;i<=20;i++) 
   {
      Sleep(200);
      printf("▶");
   }

   //화면을 깨끗이 한다. 
   system("cls");
   N=10;
   win=0; 
   stageN=0; 
   total_count=0;
   while(1)
   {
      gotoxy(10,2); printf("▶ %d단계]\n",++stageN);
      stage=0;
      while(1)
      {
         while(1)
         {
            gotoxy(10,3); printf("▶ %d-%d단계를 시작합니다.\n",stageN,++stage);
            count=0;
            while(1)
            {
               total_count++;//발생되는 문제의 개수를 센다. 

               //문제를 발생한다. 
               for(i=0;i<=stage;i++) arr[i]=rand()%N;

               //발생한 문제를 출력한다.
               gotoxy(10,5); Question_Print(arr,stage);

               //발생한 문제의 정답을 Player가 입력한다. 
               scanf("%d%*c",&player_answer);

               //출제된 문제의 답을 구한다. 
               Result=0;
               for(i=0;i<=stage;i++) Result += arr[i];

               //정답이 맞는 지 체크한다.
               if(Result==player_answer)
               {
                  win++;//문제를 맞추면 카운터를 센다. 
                  count++;//단계별 5문제를 맞출 때까지 카운터한다. 
                  gotoxy(10,7); printf("축하합니다! 정답입니다.");
                  Sleep(2000);//2초 기다린다. 
                  Clear(7,8,9);
               }
               else
               {
                  gotoxy(10,7); printf("아! ");
                  Question_Print(arr,stage);
                  printf("%d 이였습니다.",Result);
                  gotoxy(10,8); printf("좀 더 집중해 보세요.");
                  gotoxy(10,9); printf("화이팅!!!");
                  Sleep(2000);
                  Clear(7,8,9);
               }
               //Player가 몇 개를 맞추었는 지 알려준다. 
               gotoxy(10,11); printf("현재 %d개를 맞추었습니다.",count);
               gotoxy(10,12); 
               printf("5개를 맞추면 %d - %d단계를 통과합니다.",stageN,stage);

               if(count==5) break;
               gotoxy(10,5); printf("                                     ");

             }
             //몇 단계를 해결했는 지 알려준다. 
             gotoxy(10,14); printf("축하합니다. %d-%d단계를 통과하였습니다.",stageN,stage);

             //계속여부 체크하는 부분
             while(1)
              {
                  gotoxy(10,16); printf("다음 단계로 진행할까요(y/n)? ");
                  scanf("%c%*c",&ch); //%*c : enter key
                  if(ch=='y' || ch=='Y' || ch=='n' || ch=='N') break;
                  gotoxy(10,17); printf("y, Y, n, N만 입력하세요.");
                  gotoxy(10,18); printf("다시 입력하세요...");
                  Sleep(2000);//2초 기다린다.
                  Clear(16,17,18);
              }
              if(stage==4 || ch=='n' || ch=='N') break;
              system("cls");
            }
            if(stage==4 || ch=='n' || ch=='N') break;
            system("cls");

          }
          if(ch=='n' || ch=='N') break;
          N+=10;//난이도를 높인다.
          system("cls");
       }

       //게임을 끝낸 최종 결과를 출력한다. 
       system("cls");
       gotoxy(5,3);
       printf("%s님은 ",Name);
       printf("총 %d개의 문제 중 ",total_count);
       printf("%d개의 문제를 맞추었습니다.", win);

       if(N>=100 || total_count==win)
       { 
          gotoxy(5,5); 
          printf("%s님은 능력자입니다.",Name); 
       }
       else
       { 
          gotoxy(5,5); 
          printf("꾸준히 노력하면 %s님도 능력자가 될 수 있습니다.",Name);
       }

       gotoxy(5,7); printf("수고하셨습니다.");

       return 0;                                                                                                            
}

 

결과]

게임시작화면]

 

이름을 입력하고 Enter하면 문제불러오기]

 

1단계]

1-1단계 문제출제]

 

5문제를 다 맞추면 계속여부 물어보기]

 

계속 다음단계로 진행할 때]

 

1-2단계 문제(3항식)]

 

작업을 끝내기 위해 n을 입력]

 

게임이 끝나면 결과를 출력한다]

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글