본문 바로가기
C,C++/코드정리

[C/C++] 가위바위보 게임 구현

by 마두식 2022. 9. 7.
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <time.h>
 
int main() {
    enum RSP {
        RSP_R,
        RSP_S,
        RSP_P,
        RSP_END
    };
 
    srand((unsigned int)time(NULL));
    
    int player, npc;
 
    while (true) {
        std::cout << "0. Rock" << std::endl;
        std::cout << "1. Scissors" << std::endl;
        std::cout << "2. Paper" << std::endl;
        std::cout << "3. Exit" << std::endl;
 
        std::cout << "0 ~ 3까지 번호를 선택해주세요 : ";
        std::cin >> player;
        std::cout << std::endl;
 
        if (player < RSP_R || player > RSP_END) {
            std::cout << "Error" << std::endl;
            system("pause");
            continue;
        }
 
        else if (player == RSP_END) {
            std::cout << "게임을 종료합니다." << std::endl;
            break;
        }
 
        switch (player) {
        case RSP_R:
            std::cout << "player : Rock" << std::endl;
            break;
        case RSP_S:
            std::cout << "player : Scissors" << std::endl;
            break;
        case RSP_P:
            std::cout << "player : Paper" << std::endl;
            break;
        }
 
        npc = rand() % 3;
 
        switch (npc) {
        case RSP_R:
            std::cout << "AI : Rock" << std::endl;
            break;
        case RSP_S:
            std::cout << "AI : Scissors" << std::endl;
            break;
        case RSP_P:
            std::cout << "AI : Paper" << std::endl;
            break;
        }
 
        int condition = player - npc;
 
        switch (condition)
        {
        case 0:
            std::cout << "비겼습니다!" << std::endl;
            break;
        case 1:
        case -2:
            std::cout << "졌습니다!" << std::endl;
            break;
        default:
            std::cout << "이겼습니다!" << std::endl;
            break;
        }
 
        std::cout << std::endl;
    }
}
cs

 

기본적인 가위바위보 게임 구현입니다.

 

 

 

먼저 열거형을 선언하여 가위, 바위, 보, 끝내기 4가지를 0~4의 정수값에 대응하여 지정합니다.

 

 

위의 코드를 이용하여 rand의 seed값을 계속하여 변경합니다.

seed값을 계속 변경하여 주어야 실행할 때마다 rand() 함수의 값이 변경됩니다.

 

 

26~30 라인은 사용자가 0~4 이외의 값을 입력했을 때의 예외처리 입니다.

32~35 라인은 사용자가 4를 입력하여 게임을 끝내는 경우의 처리입니다.

 

 

37~46 라인은 사용자가 입력한 숫자에 해당하는 가위, 바위, 보 문자열을 출력합니다.

49 라인은 AI가 낼 숫자값을 지정해줍니다. rand() 함수로 랜덤 값을 받아온 후 나머지 연산을 이용해 0~2까지의 값만 가지도록 합니다.

51~61 라인은 마찬가지로 AI가 낸 숫자에 해당하는 가위, 바위, 보 문자열을 출력해주는 코드입니다.

 

 

플레이어와 AI가 낸 숫자를 각각 비교하여 모두 조건문으로 나타낼 경우 9가지의 경우로, 코드가 비효율적으로 길어지게 됩니다.

따라서 가위바위보 삼각관계의 규칙을 이용하여 다음과 같이 조건문을 지정할 수 있습니다.

 

 


 

출처 : (7) C언어/C++ 강의 9화 while문과 가위바위보 게임 [어소트락 게임아카데미] - YouTube

반응형

'C,C++ > 코드정리' 카테고리의 다른 글

[C/C++] 빙고 게임 구현  (0) 2022.09.07
[C/C++] 숫자 퍼즐 게임 구현  (0) 2022.09.07
[C/C++] 야구게임 구현  (0) 2022.09.07
[C/C++] 로또 구현 (셔플 알고리즘)  (0) 2022.09.07
[C/C++] 별찍기 구현  (0) 2022.09.07

댓글