2011. 7. 28. 23:25

//Daun..
//2011 03
/*4자리숫자로 야구게임
아직은 문자를 입력하면 애러뜸!*/
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main()  
{
 cout <<"\n\n신나는 야구게임!\n\n";    //처음 게임의 제목 입력
 cout <<"규칙 : 각자리 숫자는 1-9까지 입니다.\n.총4자리 숫자입니다.\n또한, 각자리수는 전부 달라야합니다.\n\n\n\n";   //규칙설명문구 생성
 srand(time(0));    //값 랜덤 생성
 int number[4];    //number=컴퓨터가 준 값
 int put[4];    //put=입력하는 값의 각 자리수
 int putin;    //putin=처음입력값
 int s,ball;    //s=strike갯수,ball=ball갯수,z=버릴꺼(내컴이 똥컴이라해논거)
 int b[4];    //ball갯수 더할때 사용할꺼->근데 4로 쓰는게 맞나?

 while(1){

  for(int t=0;t<=3;t++){
   number[t]=rand()%9 +1;
  }
  if(number[0]!=number[1]&&number[0]!=number[2]&&number[0]!=number[3]&&number[1]!=number[2]&&number[1]!=number[3]&&number[2]!=number[3]){
   break;
  }
 }   /*while문-1값을 대입함으로써 항상 돌아가도록 만들엇고,
    number은 각각의 자리의 숫자를 컴퓨터가 만들어 준것이다.
    단, 각 자리숫자는 모두 달라야 하기 때문에
    if절을 이용해서 각자리 숫자가 전부 다른경우 for문을 끝내라는 조건을
     달아주었다.*/
 cout << number[0]<<number[1]<<number[2]<<number[3] <<endl;//정답 테스트를위해 적어줌->본래에는 지워야함.!!!!!!!!!!!!!!!!!!
 cout << "숫자를 입력해 주세요.\n";//숫자를 입력하라는 문구 출력
 while(1){
  cin >> putin;   //숫자를 입력.
  put[0]=putin/1000;    //1000자리숫자를 put[0]에 입력
  put[1]=(putin%1000)/100;   //100자리숫자를 put[1]에 입력
  put[2]=putin%100/10;   //10자리숫자를 put[2]에입력
  put[3]=putin%10;    //1자리숫자를 put[3]에입력
  if(putin>=1000 && putin<10000 && put[0]!=put[1] && put[0]!=put[2]&& put[0]!=put[3] && put[1]!=put[2] && put[1]!=put[3] && put[2]!=put[3]){
          // if문을 이용하여 양의 4자리인경우에만 계산을 하라고 함, 각자리수가 다 다른숫자만입력하게 만듬
   if(put[0]==number[0]&&put[1]==number[1]&&put[2]==number[2]&&put[3]==number[3]){
    cout << "정답입니다!!>_<\n\n 게임이 끝났습니다.\n";
    break;
   }   /*만약 정답을 맞췃을경우에 게임이 끝낫다는 문구와함께
      while문을 빠져나오라는 명령을 내립니다*/
   else{
    b[0]=0;
    b[1]=0;
    b[2]=0;
    b[3]=0;
    s=0;   /*이것이 처음에는 중요하지 않아 보이나
        한번 else과정을 거치고 났을때 남아잇던 값들을 초기화 시키는 역활을 합니다.*/
    for(int q=0; q<4;q++){
     if(number[q]==put[q]){
      s++;
     }   //for문을 이용하여 strike의 갯수를 파악합니다.
    }
    if(number[0]==put[1] || number[0]==put[2] ||number[0]==put[3]){
     b[0]++;
    }   //대입한 수의 첫번째 자리 숫자가 ball이 성립하는지 검토합니다.
    if(number[1]==put[0] || number[1]==put[2] || number[1]==put[3]){
     b[1]++;
    }   //대입한 수의 두번째 자리 숫자가 ball이 성립하는지 검토합니다.
    if(number[2]==put[0] || number[2]==put[1] || number[2]==put[3]){
     b[2]++;
    }   //대입한 수의 세번째 자리 숫자가 ball이 성립하는지 검토합니다.
    if(number[3]==put[0] || number[3]==put[1] || number[3]==put[2]){
     b[3]++;
    }   //대입한 수의 세번째 자리 숫자가 ball이 성립하는지 검토합니다.
    ball=b[0]+b[1]+b[2]+b[3];//각각 구해논 ball의 갯수를 합합니다.
    cout << s << "스트라이크" << ball << "볼" << "입니다.\n\n"<<"***다시입력하세요.\n";//최종적인 문구 출력
   }   /*else 문의 끝. 정답을 맞추지 못하엿을경우에
      계산해야 할것들이 들어있습니다.*/
  }    /*while문의 끝. 1을 대입함으로써 항상 돌아가도록 만들었으며
       이때의 while의 역활은 숫자를 계속해서 대입하라는 문구가 뜨는 역활입니다.
      또한 대입시 strike와 ball을 표시해주는것도 있습니다.*/
  else {
   cout << "4자리 각자리수가 다 다른 정수만 가능합니다.\n 숫자를 다시 입력해 주세요,\n";
  }   //4자리 정수가 아닌경우에 출력할 값
 }


 return 0;
}

/*
4자리 숫자로 하는 야구게임
너무 어려워서 처음에는 3자리숫자로 먼저 시작햇다...
그러고나서 바꾸니 금세 하더라;....

처음으로 만든 거대한 코드라서 ㅇ만들고나니 완전 두근두근 신남신남이엿지요
*/

'Code > c/c++' 카테고리의 다른 글

[C++ Code]주소값출력하기  (0) 2011.07.28
[C++ Code]재귀함수  (0) 2011.07.28
[C++ Code]스위치연습  (0) 2011.07.28
[C++ Code]소수출력하기  (0) 2011.07.28
[C++ Code]포인터없이 최대값출력하기  (0) 2011.07.28
Posted by I_co