2016년 1월 20일 수요일

c언어로 야구게임하기.

c언어 기본 강의를 수강하고 "내가 배운 기초들로 무엇을 만들 수 있을까?"라고 생각이 들었다. 하지만 혼자 생각으론 아무런 생각을 해낼 수 없었다. 그래서 교수님께 조언을 구했더니 과제를 내주셨다.
우선 야구게임을 만들어 보아라. 평소 온라인 게임을 즐겨하던 나는 부담감없이 도전 할 수 있었다. 단 소스는 보지 않은 상태로.

야구게임 룰은
1. 컴퓨터가 임의로 겹치지 않은 숫자 3개를 정한다.
2. 사용자가 숫자 3개를 입력한다.
3. 숫자만 맞으면 ball, 자리와 숫자도 맞으면 strike다.
4. 3 strike가 되면 게임종료

강의에서 컴퓨터가 임의로 숫자를 선택한다는 것을 몰랐기 때문에 이 부분은 찾아보았다.

rand이라는 함수가 있었다. random의 뜻이다. 이것은 임의로 고른다는 것이고 이 함수를 사용 하려면 헤더 #include<stdlib.h>가 필요하다.

rand()[0,n] 은 정수 0 ~n-1 까지 임의로 고르는 것이다.
그런데 몇번을 해도 같은 임의의 숫자가 나올 것이다. 그래서 필요한것이 srand(()time(NULL));
가 필요한데 time를 쓰려면 헤더 time.h가 필요하다.
그렇게 설정해주면 시간에따라 임의의 숫자가 계속 변한다.


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
 int A[3];
 int B[3];
 int i=1;
 int j,k;
 int strike;
 int ball;
 do{
  srand(time(NULL));
  A[0]=rand()%10;
  A[1]=rand()%10;
  A[2]=rand()%10;
  if((A[0]!= A[1]))
   if((A[1] != A[2]))
    if((A[0] != A[2]))
    {
   printf("Start Game\n");
   break;
    }
 }while(1); //서로다른 숫자를 뽑기위해 계속 실행하기위해 do while 무한반복문을 하였다.
 do{
  printf("3개의 숫자 선택 :");
  scanf("%d %d %d",&B[0],&B[1],&B[2]);
  if((A[0]==B[0])&&(A[1]==B[1])&&(A[2]==B[2]))  // 모두 같으면 게임끝
  {
   printf("game over \n");
   break;
  }
  else                  //그렇지 않으면 반복문 실행
  {
   strike =0;
   ball=0;   // 변수 초기화 한 이유는 사용자가 게임도중에 시도한 횟수에따라 계속 증가를 막기위한 이유다.
   for(j=0;j<3;j++)
   {
    for(k=0;k<3;k++)
    {
     if(A[j]==B[k])     // 처음에는 변수를 배열로 하지 않았는데 a,b,c,d,e,f 로 하면 조건이 너무 길어져서 일단 임의의 숫자랑 사용자가 선택한 숫자가 같은 조건을 만들었다.
     {
      if(j==k) //배열의 값도 같고 배열 숫서도 같으면 strike를 1추가 그렇지 않으면 ball추가
       strike++;
      else
       ball++;
     }
    }
   }

   printf("%d번쨰 도전결과 : %d strike, %d ball !!\n\n",i,strike,ball);
  }
  i++;
 }while(1);
}