컴퓨터는 난수 생성을 통해 가위 바위 보 중 하나를 선택
사용자는 가위 바위 보 중 하나를 입력
두 값을 비교해서 승무패를 알려주는 프로그램을 만든다
단, 프로그램은 사용자가 패배할 때까지 동작하고, 마지막에 게임이 끝난 후 게임의 결과 (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;
}
아직 한참 멀었다. 더 열심히 하자.