BE/C++

[C++] 랜덤함수를 이용한 베스킨라빈스31 게임

콩다영 2023. 10. 26.
728x90

 

▷ c++ 난수생성 

#include <cstdlib>
#include <ctime>

std::srand(time(NULL));			// 매번 같은 값을 생성하려면 srand() 함수에 seed 전달. 
int randomNumber = std::rand(); 	// 0 ~ 32767 사이의 랜덤한 숫자. 
int num = randomNumber % 25 + 1; 	// 범위를 한정하고 싶다면 나머지 이용 하기

cout << randomNumber << endl; 
cout << num << endl;

 

 

랜덤함수를 이용하여 베스킨라빈스31 게임을 만들어 보았다.

사용자는 1~3개의 숫자를 고르고, 컴퓨터는 난수생성으로 숫자를 고르게 하여 게임이 진행된다.

 

 

실행코드

#include <iostream>
#include <cstdlib>


// 베스킨라빈스31게임

using std::cin;
using std::cout;
using std::endl;

std::string playGame();

int main()
{
    std::string winner;
    std::srand(time(NULL));

    winner = playGame();
    cout << "\n게임 종료 !!" << winner << "의 승리입니다." << endl;
}

std::string playGame() {
    int num = 0, userNum, comNum;
    std::string win;

    cout << " ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽" << endl << endl;
    cout << " ▷▷▷ 베스킨라빈스31 게임 START  ◁◁◁" << endl << endl;
    cout << " △△△△△△△△△△△△△△△△△△△△" << endl << endl << endl;

    while (1) {
        cout << "사용자가 부를 숫자의 개수를 입력하세요 : ";
        cin >> userNum;

        if (1 <= userNum && 3 >= userNum) {
            cout << "☞ USER : ";
            for (int i = 0; i < userNum; i++) {
                num++;
                cout << num << " ";
                if (num == 31) {
                    win = "컴퓨터";
                    return win;
                }
            }
            cout << endl;

            //컴퓨터 1~3 랜덤 숫자 선택.
            comNum = std::rand() % 3 + 1;
            cout << "☞ COM : ";
            for (int j = 0; j < comNum; j++) {
                num++;
                cout << num << " ";
                if (num == 31) {
                    win = "사용자";
                    return win;
                }
            }
            cout << endl<< endl;
        }
        else {
            cout << "1~3 사이의 수를 입력해주세요." << endl;
        }
    }
}

 

실행결과

 

보완점

: 컴퓨터는 자동으로 난수생성만 하다보니 31을 피할 수 있는 상황에서도 안 피하고 31도 말하게 되어버린다.

컴퓨터가 난수로 숫자를 부르지만도 31을 피할 수 있는 로직도 구현해보고싶다 !  

728x90
반응형

댓글