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

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

by 건티 2022. 3. 16.
728x90

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

 

문제]

임의의 자연수 두개를 발생하여 더하기 게임하기.

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

단계마다 5개의 문제를 맞추면 다음 단계로 진행할 수 있도록 한다.

단계가 끝나면 계속 작업여부를 체크한다.

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

능력자는 문제를 다 맞추었거나 10단계를 넘으면 능력자로 인정한다.

 

 

프로그램]

//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);
}

int main()
{
   int a,b;//문제 발생 변수
   int player_answer;//문제에 대한 정답변수
   int count;//맞춘 개수 변수
   int total_count;//전체 문제를 세는 변수 
   int stage;//게임의 단계를 체크하는 변수
   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;
   stage=0; 
   total_count=0;
   while(1)
   {
      gotoxy(10,2); printf("%d단계를 시작합니다.\n",++stage);
      count=0;
      while(1)
      {
         total_count++;//발생되는 문제의 개수를 센다. 

         //문제를 발생한다. 
         a=rand()%N;
         b=rand()%N;

         //발생한 문제의 정답을 Player가 입력한다. 
         gotoxy(10,5); printf("%d + %d = ",a,b);
         scanf("%d%*c",&player_answer);

         //정답이 맞는 지 체크한다.
         if((a+b)==player_answer)
         {
            count++;
            gotoxy(10,7); printf("축하합니다! 정답입니다.");
            Sleep(2000);//2초 기다린다. 
            gotoxy(10,7); printf("                       ");
            gotoxy(10,8); printf("                       ");
            gotoxy(10,9); printf("                       ");
         }
         else
         {
            gotoxy(10,7); printf("아! %d + %d = %d 이였습니다.",a,b,a+b);
            gotoxy(10,8); printf("좀 더 집중해 보세요.");
            gotoxy(10,9); printf("화이팅!!!");
            Sleep(2000);
            gotoxy(10,7); printf("                                ");
            gotoxy(10,8); printf("                                ");
            gotoxy(10,9); printf("                                ");
         }

         //Player가 몇 개를 맞추었는 지 알려준다. 
         gotoxy(10,11); printf("현재 %d개를 맞추었습니다.",count);
         gotoxy(10,12); printf("5개를 맞추면 %d단계를 통과합니다.",stage);

         if(count==5) break;

         gotoxy(10,5); printf("                       ");
      }

      //몇 단계를 해결했는 지 알려준다. 
      gotoxy(10,14); printf("축하합니다. %d단계를 통과하였습니다.",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초 기다린다.
         gotoxy(10,16); printf("                                ");
         gotoxy(10,17); printf("                                ");
         gotoxy(10,18); printf("                                ");
       }
       if(ch=='n' || ch=='N') break;
       N*=2;//난이도를 높인다.
   }

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

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

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

   return 0;
}

 

 

결과]

첫화면)

 

이름을 입력하고 Enter 한 결과)

 

문제를 해결)

 

틀렸을 경우)

 

문제 5개를 맞추고 단계를 통과했을 때)

 

다음 단계 진행여부 체크시 틀린 단어 입력시)

 

y를 입력하면 다음 단계 문제를 푼다)

 

n을 입력하면 작업을 끝낸다)

 

 

 

 

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

 

반응형

댓글