강께르의 개발일지
[C++] 가위바위보 게임 본문
1. 이것은 무엇인가?
if, switch, while을 이용해서 컴퓨터와 가위바위보를 하는 게임이다. 사용자는 선택지를 제공받아 1에서 3 사이의 숫자 중 하나를 고르고, rand 함수를 이용해서 컴퓨터가 선택지 중 하나를 고르게 한다. 그리고 조건문을 통해 그에 맞는 결과를 출력해주고, 반복문을 이용해서 게임 수가 10번이 넘지 않도록 만든다.
2. 새로 알게 된 것은?
srand()의 사용법을 알게 됐다. srand()를 rand()를 사용할 자리에 대체해서 들어가 사용하는 줄 알았는데, rand()에 사용될 값을 srand()의 매개변수로 들어갈 시드값으로 초기화한다는 점을 알게 됐다. srand()의 매개변수로 들어갈 값은 실행시킬 때마다 매번 새로운 시드값을 부여하기 위해서 시간을 사용했다. C++ 기준으로 ctime 헤더파일에 있는 time은 현재 시간을 time_t 자료형으로 알려준다. 이를 이용하기 위해 unsigned int로 캐스팅을 해서 매개변수를 사용하는 것까지 알게 됐다.
3. 코드
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
enum HAND {
SCISSORS,
ROCKS,
PAPERS
};
enum RESULT {
WIN,
LOSE,
DRAW
};
int main(void)
{
int playerChoose, computerChoose, gameCount = 0;
int resultNum = 0, winCount = 0, loseCount = 0;
srand((unsigned int)time(NULL));
cout << "=======================================" << endl;
cout << "======== 가 위 바 위 보 게 임 =========" << endl;
cout << "=======================================" << endl << endl;
while (gameCount++ < 10)
{
cout << "=======================================" << endl;
cout << "============== " << gameCount << "번째 판 =============== " << endl;
cout << "=======================================" << endl << endl;
cout << "=======================================" << endl;
cout << "가위, 바위, 보 중에 하나를 선택하세요." << endl;
cout << "=======================================" << endl;
cout << "1. 가위" << endl;
cout << "2. 바위" << endl;
cout << "3. 보" << endl;
cout << "=======================================" << endl;
cout << "1 ~ 3 중에서 고르세요 : ";
cin >> playerChoose;
while ((playerChoose < 1) || (playerChoose > 3))
{
cout << "1 ~ 3 중에서 다시 고르세요 : ";
cin >> playerChoose;
}
playerChoose--;
cout << "=======================================" << endl;
computerChoose = rand() % 3;
if (playerChoose == SCISSORS)
{
cout << "플레이어의 선택 : 가위" << endl;
switch (computerChoose)
{
case SCISSORS:
resultNum = DRAW;
break;
case ROCKS:
resultNum = LOSE;
loseCount++;
break;
case PAPERS:
resultNum = WIN;
winCount++;
break;
}
}
else if (playerChoose == ROCKS)
{
cout << "플레이어의 선택 : 바위" << endl;
switch (computerChoose)
{
case SCISSORS:
resultNum = WIN;
winCount++;
break;
case ROCKS:
resultNum = DRAW;
break;
case PAPERS:
resultNum = LOSE;
loseCount++;
break;
}
}
else if (playerChoose == PAPERS)
{
cout << "플레이어의 선택 : 보" << endl;
switch (computerChoose)
{
case SCISSORS:
resultNum = LOSE;
loseCount++;
break;
case ROCKS:
resultNum = WIN;
winCount++;
break;
case PAPERS:
resultNum = DRAW;
break;
}
}
switch (computerChoose)
{
case SCISSORS:
cout << "컴퓨터의 선택 : 가위" << endl;
break;
case ROCKS:
cout << "컴퓨터의 선택 : 바위" << endl;
break;
case PAPERS:
cout << "컴퓨터의 선택 : 보" << endl;
break;
}
switch (resultNum)
{
case 0:
cout << "컴퓨터를 상대로 승리했습니다." << endl;
break;
case 1:
cout << "컴퓨터를 상대로 패배했니다." << endl;
break;
case 2:
cout << "컴퓨터를 상대로 비겼습니다." << endl;
break;
}
cout << "=======================================" << endl;
cout << endl << endl;
}
gameCount--;
cout << "=======================================" << endl;
cout << "승리 : " << winCount << "회" << endl;
cout << "패배 : " << loseCount << "회" << endl;
cout << "무승부 : " << gameCount - winCount - loseCount << "회" << endl;
cout << "승률 : " << (double)winCount / gameCount * 100 << "%" << endl;
cout << "=======================================" << endl;
cout << endl;
return 0;
}
4. 결과
'연습' 카테고리의 다른 글
[C++] 몬스터와 일대일 턴제 전투 게임_구조체로 수정 (0) | 2021.06.12 |
---|---|
[C++] 숫자야구 게임 (0) | 2021.06.08 |
[C++] 몬스터와 일대일 턴제 전투 게임 (0) | 2021.06.08 |
[C++] 숫자 맞추기 게임 (0) | 2021.06.04 |
[C++] cout을 이용한 캐릭터 그리기 (0) | 2021.06.01 |