본문 바로가기

- Programming/- C++

★ 13. 숫자 야구 게임 만들기

반응형

숫자 야구 게임 만들기

 

게임 규칙입니다.

숫자는 3자리 중복되지 않습니다.

플레이어는 총 10번의 공격을 할 수 있으며

첫째 자리 수는 0이 올 수 없습니다.

자리수와 숫자가 같으면 스트라이크

숫자만 같으면 볼

하나도 맞지 않으면 아웃(종료) 입니다.

 

#include <iostream>
#include <time.h>

using namespace std;

void main()
{
     srand((long)time(NULL));

 int coNum[3] = {0,};
 int myNum[3] = {0,};

 int strike = 0, ball = 0;
 int out = 0;
 int i,j;
 int roundCount = 0;
 int startBtn = 0;
 bool numError = false;

 for (i=0; i<3; i++)
 {
      coNum[i] = rand() % 10;
      if ( coNum[0] == 0 )
      {
           i--;
      }
      for (j=0; j<i; j++)
      {
           if ( coNum[i] == coNum[j] )
           {
            i--;
           }
      }
 }
 cout << coNum[0] << coNum[1] << coNum[2] << endl;

 cout << " 숫자 야구 게임을 시작하겠습니다. " << endl << endl;
 cout << " 총 10번의 공격을 할 수 있습니다. " << endl << endl;
 cout << " 숫자는 3자리 수이고 중복되지 않으며 " << endl << endl;
 cout << " 첫번째 자리 수는 0이 올 수 없습니다. " << endl << endl;
 cout << " 숫자는 1 2 3, 4 5 6 처럼 띄어쓰기로 구분해주세요. " << endl << endl;
 
 cout << " 게임을 시작하시려면 1을 입력해주세요. " << endl;
 cout << " -> ";

 cin >> startBtn;

 if ( startBtn == 1 )
 {
      while (1)
      {
       numError = false;
       cout << " 플레이어의 " << roundCount+1 << "번째 공격 ! " << endl;
       cout << " -> ";
       cin >> myNum[0] >> myNum[1] >> myNum[2];

   if ( myNum[0] == 0 )
   {
        cout << " 첫번째 숫자는 0일 수 없습니다. 다시 입력해주세요. " << endl;
        continue;
   }
   for (i=0; i<3; i++)
   {
        if( myNum[i] < 0 || myNum[i] > 9 )
        {
             numError = true;
        }
   }
   
   if ( numError == true )
   {
        cout << " 숫자가 범위를 벗어납니다. 숫자를 다시 입력해주세요. " << endl;
        continue;
   }
   

   for (i=0; i<3; i++)
   {
        for(j=0; j<3; j++)
        {
             if (coNum[i] == myNum[j] && i == j)
             {
                  strike++;
             }
             else if (coNum[i] == myNum[j] && i != j)
             {
                  ball++;
             }
        }    
      }

   if ( strike == 0 && ball == 0 )
   {
        out = 1;
   }

   cout << " 공격 결과 : " << strike << "Strike " << ball << "Ball " << endl << endl << endl;

   if ( out == 1 )
   {
        cout << " 아웃입니다. " << endl;
        cout << " 게임이 종료됩니다. " << endl;
        break;
   }

   if ( strike == 3 )
   {
        cout << " 공격 성공! 컴퓨터의 숫자도 " << coNum[0] << coNum[1] << coNum[2] << "입니다." << endl;
        break;
   }

   roundCount++;

   if ( roundCount == 10 )
   {
        cout << " 공격 횟수 10번이 끝났습니다. " << endl;
        break;
   }

   strike = 0;
   ball = 0;
  }
 }
}

 

뭔가 선이 되게 안맞는 것 같네요.

파일이 필요하시면 이메일 알려주시면 보내드리겠습니다.

반응형