비타Cpp

조건문 if, if ~ else if ~ else 가위 바위 보 게임 본문

C,C++

조건문 if, if ~ else if ~ else 가위 바위 보 게임

멍C 2020. 4. 21. 14:37

가위 바위 보 게임은 다들 아실 겁니다.

 

두 명이서 가위 바위 보를 내서 승부를 짓는 게임이죠.

 

내가 가위를 냈는데 상대가 바위를 내면 지고,

상대가 보를 내면 이기는 간단한 게임을 코드로 만들어 보겠습니다.

 

일단 헤더는 이렇게 해주세요.

#include <iostream>
#include <time.h>
using namespace std;

 

이번에는 새롭게 출력만 하는 것이 아닌 콘솔에 직접 무엇을 낼지 입력도 해볼 것입니다.

scanf라는 함수도 있지만 이번에는 std에 있는 cin이라는 인터페이스를 써보겠습니다.

 

사용방법은 아주 간단합니다.

std::cin >> 입력시킨 값을 넣을 변수;

이렇게만 하면 콘솔은 cin에서 값을 입력해서 엔터를 누를 때까지 대기하게 됩니다.

std는 <iostream>에 정의돼있습니다.

 

자 그리고 제가 두 개를 다 제가 입력하면 재미없죠..

그래서 컴퓨터가 랜덤 값으로 1~3중 하나를 고르게 할 것입니다.(1 = 가위, 2 = 바위, 3 = 보)

 

이때는 새로운 헤더가 필요합니다.

#include <time.h>

이 헤더를 가져와서 시간 값을 사용해야 하죠.

 

srand()는 괄호 안에 일명 '시드'라고 하는 값을 넣어줘야. 값이 바뀌는데 이 값이 항상 다른 값이 들어가게 해야 랜덤이 됩니다. 그래서 항상 값이 바뀌는 시간 값을 넣어줍니다.

이 과정 없이 랜덤을 돌리면 랜덤이 프로그램이 돌아간 시점부터 돌아 항상 같은 주기의 랜덤 값을 내보냅니다. 꼭 해야 하죠.

 

srand(time(NULL));

 

자 그럼 시드까지 설정했으면 rand()라는 랜덤 수를 내보내는 함수를 이용하면 랜덤 값이 나옵니다.

 

하지만 저희는 1~3까지의 수만 필요하죠..

 

그래서 rand()에 3을 mod(%) 연산을 해줍니다.

그럼 0~2중 아무수가 무조건 나오게 되죠.

거기다가 +1을 해주면 1~3의 랜덤수가 나오게 됩니다.

 

 int nCSelect = 0; // 컴퓨터의 선택
 nCSelect = rand() % 3 + 1; // 컴퓨터 랜덤수 저장

 

자 그럼 이제 저의 패와 컴퓨터 패가 준비됐고,

이제 서로를 비교해야 하겠죠.

이제부터는 저희가 본격적으로 나룰 if문이 나설 때입니다.

 

총경우의 수는??

제가 가위 바위 보를 냈을 때 컴퓨터는 각각 가위 바위 보를 낼 수 있는 경우의 수가 있죠.

3 X 3 = 9의 경우의 수입니다.

 

그걸 if ~ else if ~ else로 짜면 이렇게 되죠!

int main()
{
	srand(time(NULL));

	printf("가위 바위 보 게임!! \n");
	printf("(1 = 가위, 2 = 바위, 3 = 보)");
	printf("입력: ");
	int nPSelect = 0; // 플레이어의 선택
	std::cin >> nPSelect; //플레이어 입력
    	int nCSelect = 0; // 컴퓨터의 선택
	nCSelect = rand() % 3 + 1; // 컴퓨터 랜덤수 저장

	if (nPSelect == 1)
	{
		//내가 가위를 냈을때,
		if (nCSelect == 1)
		{
			//컴퓨터가 가위를 낸다.
			//가위 vs 가위 = 무승부
			printf("무승부!");
		}
		else if (nCSelect == 2)
		{
			//컴퓨터가 바위를 낸다.
			//가위 vs 바위 = 패배
			printf("패배...");
		}
		else
		{
			//컴퓨터가 보를 낸다.
			//가위 vs 보 = 승리
			printf("승리!!!!!");
		}
	}
	else if (nPSelect == 2)
	{
		//내가 바위를 냈을때,
		if (nCSelect == 1)
		{
			//컴퓨터가 가위를 낸다.
			//바위 vs 가위 = 승리
			printf("승리!!!!!");
		}
		else if (nCSelect == 2)
		{
			//컴퓨터가 바위를 낸다.
			//바위 vs 바위 = 무승부
			printf("무승부!");
		}
		else
		{
			//컴퓨터가 보를 낸다.
			//바위 vs 보 = 패배
			printf("패배...");
		}
	}
	else
	{
		//내가 보를 냈을때,
		if (nCSelect == 1)
		{
			//컴퓨터가 가위를 낸다.
			//보 vs 가위 = 패배
			printf("패배...");
		}
		else if (nCSelect == 2)
		{
			//컴퓨터가 바위를 낸다.
			//보 vs 바위 = 승리
			printf("승리!!!!!");
		}
		else
		{
			//컴퓨터가 보를 낸다.
			//보 vs 보 = 무승부
			printf("무승부!");
		}
	}
	printf("\n player:%d vs computer:%d", nPSelect, nCSelect);

}

 그리고 마지막 printf() 괄호 안에 % d와 변수가 있습니다. % d는 정수를 출력한다는 것이고, 어떤 정수인지는 그다음 변수들에게 저장된 값들이 들어가게 되는 것입니다.

 

 

가위바위보 결과창(이겼어요!!)

'C,C++' 카테고리의 다른 글

const 위치에 따른 의미들  (0) 2020.05.16
조건문 switch  (0) 2020.04.22
조건문 if, if ~ else if ~ else  (0) 2019.12.02
C의 기본타입들..(2)  (0) 2019.11.26
C의 기본 타입들..(1)  (0) 2019.11.11
Comments