본문 바로가기
일상

C++로 주사위 굴리기 프로그램 만들기 - 완벽 가이드

by 6story 2025. 2. 22.
반응형

🎲C++에서 랜덤 주사위를 굴리는 방법을 알고 싶나요?

게임을 만들거나 랜덤 이벤트를 추가할 때 주사위 굴리기 기능은 매우 유용합니다. 특히, C++에서 주사위를 구현하는 방법을 배우면 랜덤 숫자 생성 원리와 함께 실전 코딩 능력도 키울 수 있습니다.

이 글에서는 C++을 활용한 주사위 굴리기 프로그램을 단계별로 설명하고, 구체적인 코드 예제와 최적화 팁을 함께 제공하겠습니다.


📖 목차

  1. C++에서 랜덤 숫자 생성하는 방법
  2. 주사위 굴리기 기본 코드 작성
  3. 다양한 주사위(6면, 20면 등) 굴리기 구현
  4. 반복적으로 주사위 굴리기 & 사용자 입력 추가
  5. 고급 랜덤 함수 활용 및 최적화
  6. 최종 코드 및 응용 예제

1️⃣ C++에서 랜덤 숫자 생성하는 방법

🔹 rand() 함수 활용하기

C++에서 난수를 생성하는 가장 기본적인 방법은 rand() 함수를 이용하는 것입니다.

#include <iostream>
#include <cstdlib>  // rand() 함수 포함

int main() {
    std::cout << "랜덤 숫자: " << rand() << std::endl;
    return 0;
}

하지만, rand() 함수만 사용하면 항상 동일한 난수를 얻을 수 있습니다. 이를 방지하려면 srand() 함수를 활용하여 시드(seed)를 설정해야 합니다.

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    srand(time(0)); // 현재 시간을 기준으로 난수 생성
    std::cout << "랜덤 숫자: " << rand() << std::endl;
    return 0;
}

이제 실행할 때마다 다른 난수가 생성됩니다! 🎲


2️⃣ 주사위 굴리기 기본 코드 작성

주사위는 일반적으로 1부터 6까지의 숫자를 랜덤하게 출력해야 합니다. rand()를 이용해 범위를 조정하면 간단히 구현할 수 있습니다.

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    srand(time(0));
    int dice = (rand() % 6) + 1; // 1~6 사이의 숫자 생성
    std::cout << "주사위 결과: " << dice << std::endl;
    return 0;
}

📌 rand() % 6은 05 사이의 숫자를 생성하며, +1을 추가하면 16 범위가 됩니다.


3️⃣ 다양한 주사위(6면, 20면 등) 굴리기 구현

6면 주사위뿐만 아니라, 20면 주사위(D20), 10면 주사위(D10) 등 다양한 주사위를 구현할 수도 있습니다.

#include <iostream>
#include <cstdlib>
#include <ctime>

int rollDice(int sides) {
    return (rand() % sides) + 1;
}

int main() {
    srand(time(0));
    std::cout << "6면 주사위: " << rollDice(6) << std::endl;
    std::cout << "20면 주사위: " << rollDice(20) << std::endl;
    return 0;
}

이제 6면, 20면, 원하는 면수를 가진 주사위를 손쉽게 만들 수 있습니다!


4️⃣ 반복적으로 주사위 굴리기 & 사용자 입력 추가

사용자가 원할 때마다 주사위를 굴릴 수 있도록 입력을 추가해보겠습니다.

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    srand(time(0));
    char choice;
    do {
        int dice = (rand() % 6) + 1;
        std::cout << "주사위 결과: " << dice << std::endl;
        std::cout << "다시 굴리시겠습니까? (y/n): ";
        std::cin >> choice;
    } while (choice == 'y');
    return 0;
}

이제 사용자가 ‘y’를 입력하면 계속 주사위를 굴릴 수 있습니다! 🎲


5️⃣ 고급 랜덤 함수 활용 및 최적화

🔹 random_device와 mt19937 사용하기

rand() 함수는 완벽한 난수를 제공하지 않기 때문에, 보다 정교한 난수 생성을 위해 random_device와 mt19937을 사용하는 것이 좋습니다.

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<int> dist(1, 6);
    
    std::cout << "주사위 결과: " << dist(gen) << std::endl;
    return 0;
}

이 방법을 사용하면 보다 신뢰할 수 있는 난수 생성이 가능합니다.


6️⃣ 최종 코드 및 응용 예제

지금까지 배운 내용을 종합하여 최적화된 주사위 프로그램을 만들어보겠습니다.

#include <iostream>
#include <random>

int rollDice(int sides) {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<int> dist(1, sides);
    return dist(gen);
}

int main() {
    char choice;
    do {
        std::cout << "굴릴 주사위의 면 수를 입력하세요: ";
        int sides;
        std::cin >> sides;
        std::cout << "주사위 결과: " << rollDice(sides) << std::endl;
        std::cout << "다시 굴리시겠습니까? (y/n): ";
        std::cin >> choice;
    } while (choice == 'y');
    return 0;
}

이제 사용자가 원하는 면 수의 주사위를 입력하고 반복적으로 굴릴 수 있습니다! 🎲


🎯 마무리

이제 C++에서 주사위를 구현하는 다양한 방법을 배웠습니다!

✅ rand()와 srand(time(0))을 이용한 기본 구현 ✅ 원하는 면수를 설정할 수 있는 범용 함수 작성 ✅ random_device와 mt19937을 활용한 정교한 난수 생성

이제 직접 코드를 실행해보고 여러분만의 주사위 굴리기 프로그램을 만들어보세요! 🚀

728x90
반응형