본문으로 바로가기

[C lang] 가위 바위 보

category 개발 2021. 8. 26. 00:30

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

int main(int argc, char const *argv[])
{
  int com, user;
  int const win = 0, draw = 1, lose = 2;
  int result[3] = {0, 0, 0};
  char desc[3][10] = {"가위", "바위", "보"};
  srand(time(NULL));

  printf("***********************\n");
  printf("*   가위바위보 게임   *\n");
  printf("***********************\n");

  while (1)
  {
    com = rand() % 3;

    printf("\n\n가위(1), 바위(2), 보(3), 종료(4)를 입력하세요 : ");
    scanf(" %d", &user);
    // 종료
    if (user == 4)
      exit(0);

    // 원하는 입력 아닐 경우 재입력 요구
    if (user < 1 || user > 4)
      continue;

    // 배열 사용 위해 1 감소
    // 가위 0 바위 1 보 2
    user--;

    // 비긴 경우
    if (com == user)
    {
      result[draw]++;
      printf("컴퓨터는 %s를 내었고 사용자는 %s를 내어 비겼습니다. (%d승 %d무 %d패)",
             desc[com], desc[user], result[win], result[draw], result[lose]);
    }
    // 이긴 경우
    else if ((com == 0 && user == 1) || (com == 1 && user == 2) || (com == 2 && user == 0))
    {
      result[win]++;
      printf("컴퓨터는 %s를 내었고 사용자는 %s를 이겼습니다. (%d승 %d무 %d패)",
             desc[com], desc[user], result[win], result[draw], result[lose]);
    }
    // 진 경우
    else
    {
      result[lose]++;
      printf("컴퓨터는 %s를 내었고 사용자는 %s를 내어 졌습니다. (%d승 %d무 %d패)",
             desc[com], desc[user], result[win], result[draw], result[lose]);
    }
  }
  return 0;
}

 

 

처음 접근은 사용자 입력에 따라 조건을 비교하기 위한 것으로 접근했다. 그래서 사용한 것이 사용자 입력에 따른 조건은 switch 문을 사용하고 각 상황에 따라 이기거나 지거나 비긴 경우는 if 문으로 처리했다. switch case 한 경우만 입력한 후에 이미 코드가 복잡해질 여지가 보였다. 작동 확인만을 위해 작성을 완료하고 조건의 대상을 바꿨다.

 

승, 무, 패와 가위, 바위, 보와 같은 문자 처리도 배열로 해결했다.