2-4. 가위바위보

Crat3 ㅣ 2023. 5. 4. 19:22

0. 랜덤(rand)

rand(); // 0 ~ 32767

rand를 여러번 실행해도 동일한 결과가 나온다. 따라서 srand를 사용하여 시드 값을 지정한다.

srand(time(0)); // 시드 설정 - 시간에 따라 다르게

 

1. switch-case를 사용

랜덤 값을 3으로 나눈 나머지를 구해서 0, 1, 2를 추출한다.

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

    const int PAPER = 3;
    const int ROCK = 2;
    const int SCISSORS = 1;
    int input;
    while (true)
    {
      cout << "가위(1) 바위(2) 보(3)를 골라주세요." << endl;
      cin >> input;

      int value = 1 + (rand() % 3);

      switch (input)
      {
          case ROCK:
             cout << "바위를 냈습니다. " << endl;
             if (value == ROCK)
                 cout << "컴퓨터가 바위를 내어 비겼습니다." << endl << endl;
             else if (value == SCISSORS)
                 cout << "컴퓨터가 가위를 내어 내가 이겼습니다." << endl << endl;
             else
                 cout << "컴퓨터가 보를 내어 내가 졌습니다." << endl << endl;
            break;

          case PAPER:
             cout << "보를 냈습니다." << endl;
             if (value == PAPER)
                 cout << "컴퓨터가 보를 내어 비겼습니다." << endl << endl;
             else if (value == ROCK)
                 cout << "컴퓨터가 바위를 내어 내가 이겼습니다." << endl << endl;
             else
                 cout << "컴퓨터가 가위를 내어 내가 졌습니다." << endl << endl;
             break;


          case SCISSORS:
               cout << "가위를 냈습니다." << endl;
               if (value == SCISSORS)
                   cout << "컴퓨터가 가위를 내어 비겼습니다." << endl << endl;
               else if (value == PAPER)
                   cout << "컴퓨터가 바위를 내어 내가 이겼습니다." << endl << endl;
               else
                   cout << "컴퓨터가 보를 내어 내가 졌습니다." << endl << endl;
              break;
           
          default:
               cout << "잘못 입력하셨습니다." << endl;
        }
    }
}

 

2. 승률 계산하기

#include <iostream>
using namespace std;

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

    const int PAPER = 3;
    const int ROCK = 2;
    const int SCISSORS = 1;
    int input;

    int win = 0;
    int round = 0;

    while (true) {
        if (round == 0) {
            cout << "가위(1) 바위(2) 보(3)를 골라주세요." << endl << "현재 승률 : 없음" << endl;
        }
        else {
            int winrate = (win * 100) / round ;
            cout << "가위(1) 바위(2) 보(3)를 골라주세요." << endl << "현재 승률 : " << winrate << endl;
        }

        cin >> input;

        int value = 1 + (rand() % 3);

        switch (input) {
            case ROCK:
                cout << "바위를 냈습니다. " << endl;
                if (value == ROCK) {
                    cout << "컴퓨터가 바위를 내어 비겼습니다." << endl << endl;
                }
                else if (value == SCISSORS) {
                    cout << "컴퓨터가 가위를 내어 내가 이겼습니다." << endl << endl;
                    win++;
                    round++;
                }
                else {
                    cout << "컴퓨터가 보를 내어 내가 졌습니다." << endl << endl;
                    round++;
                }
                break;

            case PAPER:
                cout << "보를 냈습니다." << endl;
                if (value == PAPER) {
                    cout << "컴퓨터가 보를 내어 비겼습니다." << endl << endl;
                }
                else if (value == ROCK) {
                    cout << "컴퓨터가 바위를 내어 내가 이겼습니다." << endl << endl;
                    win++;
                    round++;
                }
                else {
                    cout << "컴퓨터가 가위를 내어 내가 졌습니다." << endl << endl;
                    round++;
                }
                break;

            case SCISSORS:
                cout << "가위를 냈습니다." << endl;
                if (value == SCISSORS) {
                    cout << "컴퓨터가 가위를 내어 비겼습니다." << endl << endl;
                }
                else if (value == PAPER) {
                    cout << "컴퓨터가 보를 내어 내가 이겼습니다." << endl << endl;
                    round++;
                    win++;
                }
                else {
                    cout << "컴퓨터가 바위를 내어 내가 졌습니다." << endl << endl;
                    round++;
                }
                break;

            default:
                cout << "잘못 입력하셨습니다." << endl;
        }
    }
}

승률 계산 시 나눗셈을 계산할 때, 100을 분자에 먼저 곱해주면 정상적으로 값을 구할 수 있다.

또는 나누는 수나 나눠지는 수를 float으로 생성해도 된다.

'기초 C++ 스터디' 카테고리의 다른 글

3-1. 함수(Function)  (0) 2023.05.09
2-5. 열거형(enum)  (0) 2023.05.04
2-2. 반복문(For, While)  (0) 2023.05.04
2-1. 분기문(If)  (0) 2023.05.04
1-8. 데이터에 관한 여러가지 팁  (0) 2023.05.02