C++기초

22년 3월 16일(1) - 가위바위보 구현하기

hyrule 2022. 3. 17. 17:03

#include <iostream>
#include <time.h>

enum class RSP
{
scissor = 1,
rock,
paper,
exit
};

//미니게임 - 가위바위보
int main()
{
srand((unsigned int)time(0));
int random = rand();

//1.어떤 변수타입을 통해 플레이어가 선택한 가위바위보를 저장할 것인가?
//-->enum타입으로 해보자

while(true)
{
system("cls"); //매 판마다 결과를 삭제
std::cout << "1.가위" << std::endl;
std::cout << "2.바위" << std::endl;
std::cout << "3.보" << std::endl;
std::cout << "4.종료" << std::endl;
std::cout << "\nInput Player : ";
int Player;
std::cin >> Player;

//2.만약에 종료를 선택할 경우 게임 진행을 멈추고 종료
if (Player == (int)RSP::exit)
break;
//매 단계마다 정상적으로 구현되었는지 테스트를 해보자.
//
//3.플레이어의 입력값이 유효한지 검증.
else if (Player < (int)RSP::scissor || Player >(int)RSP::exit)
continue;

//컴퓨터의 선택
int AI = rand() % (int)RSP::paper + 1;

//switch문으로 승부 결정
//가위바위보에는 규칙이 있다.
//R(2) vs S(1) -> 차이는 1
//P(3) vs R(2) -> 차이는 1
//S(1) vs R(3) -> 차이는 -2
//플레이어가 이길 떄 차이를 구하면 1 또는 -2이다.
printf("\n");
switch ((RSP)AI)
{
case RSP::scissor:
std::cout << "AI : 가위" << std::endl;
break;
case RSP::rock:
std::cout << "AI : 바위" << std::endl;
break;
case RSP::paper:
std::cout << "AI : 보" << std::endl;
break;
}

printf("\n");
//승부 결과 출력
int result = Player - AI;
if (result == 1 || result == -2)
std::cout << "*****플레이어 승리*****" << std::endl;
else if (result == 0)
std::cout << "*****비김*****" << std::endl;
else
std::cout << "*****패배*****" << std::endl;

printf("\n");
system("pause");//키보드 입력이 들어올 때까지 일시 정지
}

//TIP)컨트롤 + 방향키를 하면 단어 단위로 이동할 수 있다.

return 0;
}