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

ROK·2022년 7월 20일
0

문제 : 가위바위보 게임 만들기

컴퓨터는 난수 생성을 통해 가위 바위 보 중 하나를 선택
사용자는 가위 바위 보 중 하나를 입력

두 값을 비교해서 승무패를 알려주는 프로그램을 만든다

단, 프로그램은 사용자가 패배할 때까지 동작하고, 마지막에 게임이 끝난 후 게임의 결과 (n승 n무)를 출력한다.

이 문제를 더 좋은 방법으로 풀 수 있을 것 같은데, 나의 역량부족으로 if문만 많이 써서 문제를 해결했다.

잘 못한 코드

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

int main()
{
  int num, i, result = 1;
  int win = 0, mu = 0;
  srand(time(NULL));

  while (result)
  {
    i = rand() % 3 + 1;
    printf("바위는 1, 가위는 2, 보는 3 : ");
    scanf("%d", &num);

    if (num == 1)
    {
      printf("바위 선택, ");
      if (i == 1)
      {
        printf("컴퓨터 바위 선택, ");
        printf("비겼습니다.\n");
        mu++;
      }
      else if (i == 2)
      {
        printf("컴퓨터 가위 선택, ");
        printf("이겼습니다\n.");
        win++;
      }
      else
      {
        printf("컴퓨터 보 선택, ");
        printf("졌습니다.\n");
        result -= 1;
      }
    }
    else if (num == 2)
    {
      printf("가위 선택, ");
      if (i == 1)
      {
        printf("컴퓨터 바위 선택, ");
        printf("졌습니다.\n");
        result -= 1;
      }
      else if (i == 2)
      {
        printf("컴퓨터 가위 선택, ");
        printf("비겼습니다.\n");
        mu++;
      }
      else
      {
        printf("컴퓨터 보 선택, ");
        printf("이겼습니다\n.");
        win++;
      }
    }
    else if (num == 3)
    {
      printf("보 선택, ");
      if (i == 1)
      {
        printf("컴퓨터 바위 선택, ");
        printf("이겼습니다\n.");
        win++;
      }
      else if (i == 2)
      {
        printf("컴퓨터 가위 선택, ");
        printf("졌습니다.\n");
        result -= 1;
      }
      else
      {
        printf("컴퓨터 보 선택, ");
        printf("비겼습니다.\n");
        mu++;
      }
    }
    else
    {
      printf("1,2,3 중에 누르라고 좀!!!");
      return 0;
    }
  }
  printf("게임 결과 : %d승, %d무 \n", win, mu);

  return 0;
}

결과는 잘 나오긴 함
하지만 불만족...


잘 짜여진 코드

더 좋은 방법이 생각이 안나서 다른 사람들이 작성한 코드를 봤다
역시 아주 간결하고 좋았다.
비교연산자논리연산자를 잘 활용하니 아주 좋은 코드들이 나오더라

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

int main()
{
  srand(time(NULL));
  int user, com, win = 0, draw = 0, lose = 0;
  const char *arr[3] = {"바위", "가위", "보"};
  while (1)
  {
    printf("바위는 1, 가위는 2, 보는 3 : ");
    scanf("%d", &user);
    com = rand() % 3 + 1;

    if (user == com)
    {
      printf("사용자는 %s 선택, 컴퓨터는 %s 선택, 비겼습니다.\n", arr[user - 1], arr[com - 1]);
      draw++;
    }
    else if (((user < com) && (com - user == 1)) || ((user > com) && (user - com == 2)))
    {
      printf("사용자는 %s 선택, 컴퓨터는 %s 선택, 이겼습니다.\n", arr[user - 1], arr[com - 1]);
      win++;
    }
    else
    {
      printf("사용자는 %s 선택, 컴퓨터는 %s 선택, 졌습니다.\n", arr[user - 1], arr[com - 1]);
      lose = 1;
    }

    if (lose == 1)
    {
      break;
    }
  }

  printf("\n게임 결과 : %d승, %d무\n", win, draw);

  return 0;
}

아직 한참 멀었다. 더 열심히 하자.

profile
하루에 집중하자

0개의 댓글