열혈C 도전프로그래밍3 도전6

ROK·2022년 7월 20일
0

문제 : 숫자 야구 게임

컴퓨터는 0~9 중 서로 다른 세 개의 숫자를 선택
사용자는 이것을 맞춘다

숫자의 순서도 중요하다
순서와 숫자가 맞으면 strike, 순서는 다르지만 숫자가 맞으면 ball로 알려준다
1strike, 1ball과 같이 알려준다

3strike를 성공하면 마무리 한다

이 문제를 풀때 중점적으로 생각한것은 랜덤으로 숫자를 생성할 때 중복이 없어야 한다는 점이다.
처음에 중복을 깜빡했다가 컴퓨터가 377을 설정하는 바람에 한참 헤메게 되었다.

개인적으로 함수를 사용해서 배열을 넘겨주고 받고 하는걸 공부하는게 목적이라 함수를 많이 사용했다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 컴퓨터 숫자 생성
int *makeNum()
{
  static int arr[3];

  srand(time(NULL));

  for (int i = 0; i < 3; i++)
  {
    if (i == 0)
    {
      arr[i] = rand() % 10;
    }
    else
    {
      arr[i] = rand() % 10;
      for (int j = 0; j < i; j++)
      {
        if (arr[i] == arr[j])
        {
          i--;
          break;
        }
      }
    }
  }

  return arr;
}

// 사용자 숫자 입력
int *getNum()
{
  static int arr[3];
  int num;

  printf("정수 3개 입력 : ");
  for (int i = 0; i < 3; i++)
  {
    scanf("%d", &num);
    arr[i] = num;
  }

  return arr;
}

// 숫자 비교하기
int compare(int *arr1, int *arr2)
{
  int strike = 0, ball = 0;

  for (int i = 0; i < 3; i++)
  {
    if (arr1[i] == arr2[i])
    {
      strike++;
    }

    for (int j = 0; j < 3; j++)
    {
      if (i != j)
      {
        if (arr1[i] == arr2[j])
        {
          ball++;
        }
      }
    }
  }
  printf("%d strike, %d ball \n", strike, ball);

  if (strike == 3)
  {
    return 1;
  }
  else
  {
    return 2;
  }
}

// 메인함수
int main()
{
  int *computer = makeNum();
  // int *user = getNum();
  int flag = 1;
  int result, count = 0;

  while (flag)
  {
    int *user = getNum();
    result = compare(computer, user);
    count++;

    if (result == 1)
    {
      flag = 0;
    }
  }

  printf("컴퓨터가 설정한 숫자 : ");
  for (int i = 0; i < 3; i++)
  {
    printf("%d, ", computer[i]);
  }
  printf("\n%d번만에 승리했습니다\n", count);

  return 0;
}

다 하고 보니까 코드 자체는 어렵지 않은데
너무 길게 작성한 것 같다.
조금 더 간추릴 수 있지 않을까 싶으면서 귀찮아서 여기까지

나중에 재미로 4개를 넣어도 재밌을 것 같다

profile
하루에 집중하자

0개의 댓글