본문 바로가기

C 언어/연습문제

C언어 연습문제31

[문제]

가위 바위 보 게임을 만들어 보자. 사용자로부터 가위 바위 보 중에서 하나를 입력 받는다. 그리고 컴퓨터는 난수 생성을 통해서 가위 바위 보 중에서 하나를 선택하게 한다. 이 둘을 비교해서 승자와 패자를 가려주는 프로그램을 작성해 보자. 단 프로그램의 진행은 사용자가 질 때까지 계속되어야 하고, 마지막에 가서는 게임의 결과(예: 4승 3무)까지 출력해 주도록 하자.

 

[실행결과]

바위는 1, 가위는 2, 보는 3: 2
당신은 가위 선택, 컴퓨터는 가위 선택, 비겼습니다!
바위는 1, 가위는 2, 보는 3: 1
당신은 바위 선택, 컴퓨터는 바위 선택, 비겼습니다!
바위는 1, 가위는 2, 보는 3: 3
당신은 보 선택, 컴퓨터는 바위 선택, 이겼습니다!
바위는 1, 가위는 2, 보는 3: 3
당신은 보 선택, 컴퓨터는 가위 선택, 졌습니다!

게임의 결과: 1승, 2무

 

[코드]

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

#define ROCK	1
#define SCISSOR 2
#define PAPER	3

void Randomize(void);
int GetUsrSel(void);
int GetComSel(void);
int WhoWin(int s1, int s2);

int main(void)
{
	int usr, com, result;
	int win = 0, same = 0;

	Randomize();

	while (1)
	{
		usr = GetUsrSel();
		com = GetComSel();
		result = WhoWin(usr, com);

		if (result == 0)
		{
			printf("비겼습니다!\n");
			same++;
		}
		else if (result == 1)
		{
			printf("이겼습니다!\n");
			win++;
		}
		else
		{
			printf("졌습니다!\n");
			break;
		}
	}

	printf("게임의 결과: %d승, %d무", win, same);
	return 0;
}

void Randomize(void)
{
	srand((unsigned int)time(NULL));
}

int GetUsrSel(void)
{
	int sel;

	printf("바위는 1, 가위는 2, 보는 3: ");
	scanf_s("%d", &sel);

	if (sel == ROCK)
		printf("당신은 바위 선택, ");
	else if (sel == SCISSOR)
		printf("당신은 가위 선택, ");
	else
		printf("당신은 보 선택, ");

	return sel;
}

int GetComSel(void)
{
	int sel;

	sel = rand() % 3 + 1;

	if (sel == ROCK)
		printf("컴퓨터는 바위 선택, ");
	else if (sel == SCISSOR)
		printf("컴퓨터는 가위 선택, ");
	else
		printf("컴퓨터는 보 선택, ");

	return sel;
}

int WhoWin(int s1, int s2)
{
	if (s1 == s2)
		return 0;
	else if ((s1 % 3) == (s2 + 2) % 3)	// s1 승
		return 1;
	else								// s2 승
		return 2;
}

 

<참고>

윤성우의 열혈 C 프로그래밍

'C 언어 > 연습문제' 카테고리의 다른 글

C언어 연습문제33  (0) 2022.03.31
C언어 연습문제32  (0) 2022.03.31
C언어 연습문제30  (0) 2022.03.25
C언어 연습문제29  (0) 2022.03.23
C언어 연습문제28  (0) 2022.03.21