가위 바위 보
이전 포스팅에서 사용한 코드를 전부 다 이용해서 가위 바위 보 프로그램을 만들어보자.
#include <iostream>
using namespace std;
int main()
{
srand(time(0));
const int SCISSORS = 1;
const int ROCK = 2;
const int PAPER = 3;
while (true)
{
int input;
cout << "가위(1) 바위(2) 보(3)를 골라주세요! " << endl;
cout << ">";
cin >> input;
int computer = 1 + (rand() % 3);
switch (input)
{
case SCISSORS:
if (computer == SCISSORS)
cout << "가위(님) vs 가위(컴퓨터) 비겼습니다!" << endl;
else if (computer == ROCK)
cout << "가위(님) vs 바위(컴퓨터) 졌습니다!" << endl;
else if (computer == PAPER)
cout << "가위(님) vs 보(컴퓨터) 이겼습니다!" << endl;
break;
case ROCK:
if (computer == SCISSORS)
cout << "바위(님) vs 가위(컴퓨터) 이겼습니다!" << endl;
else if (computer == ROCK)
cout << "바위(님) vs 바위(컴퓨터) 비겼습니다!" << endl;
else if (computer == PAPER)
cout << "바위(님) vs 보(컴퓨터) 졌습니다!" << endl;
break;
case PAPER:
if (computer == SCISSORS)
cout << "보(님) vs 가위(컴퓨터) 졌습니다!" << endl;
else if (computer == ROCK)
cout << "보(님) vs 바위(컴퓨터) 이겼습니다!" << endl;
else if (computer == PAPER)
cout << "보(님) vs 보(컴퓨터) 비겼습니다!" << endl;
break;
default:
cout << "다시 입력해주세요." << endl;
break;
}
cout << endl;
}
return 0;
}
열거형
코드의 흐름 제어와 상관이 크게 없지만, 우리가 가위 바위 보를 상수화 해서 하드코딩을 피했다.
const를 사용해서 상수화 하는 방법 이외에 다른 방식이 존재한다. const의 아쉬운 점은 상수 인건 알겠는데 너무 변수마다 따로 따로 노는 느낌이다. 게임의 상태 이상을 하나 하나 const로 선언하면 되게 관리하기 어려울거 같다는 생각이 든다.
그럴 때 쓰는건 enum 이다.
enum은 const과 다르게 빌드 할 때, 컴파일러가 전부 치환해준다. 즉 메모리를 아낄 수 있다는 것이다. const도 컴파일러가 전부 치환해 주는 경우도 있지만, 상황에 따라(const 변수의 주소를 누가 원하거나, 지역변수여서 스택 메모리에 저장되는 경우) 메모리에 올라가는 경우가 있다.
#include <iostream>
using namespace std;
// 숫자를 초가화 해주지 않으면 첫 값은 0부터 시작
// 그 다음 값들은 이전 값 + 1 로 설정된다.
enum SRP
{
E_SCISSORS = 1,
E_ROCK,
E_PAPER,
};
'C++ > 기초' 카테고리의 다른 글
[C++] 포인터 - 1 (0) | 2023.11.24 |
---|---|
[C++] 함수 (1) | 2023.11.24 |
[C++] 코드의 흐름 제어 - 1 (분기문, 반복문) (1) | 2023.11.23 |
[C++] 데이터 가지고 놀기 - 2 (데이터 연산, const) (0) | 2023.11.23 |
[C++] 데이터 가지고 놀기 - 1 (정수, 불리언, 부동소수점, 문자열) (1) | 2023.11.22 |