[C++] 랜덤한 확률이 조정된 강화를 하는 아이템 생성하기

2022. 6. 14. 19:12코딩 1막 <C++개념편>/코딩 1막 <C++응용편>

728x90

C 언어의 랜덤함수를 공부해보신 분은 아시겠지만 컴퓨터라는 기계는 완전한 랜덤을 구현하기 힘듭니다.

 

랜덤함수는 보통 현재 시간으로부터 Seed 값을 받아와서 불규칙하지만 같은 값이 반복되어 나오지는 않는 (적어도 주어진 값 범위 내에서는 모든 수를 중복되지 않게 출력하기 전까지는 다시 같은 수가 안나오게) 수열을 생성해서 결과값을 가지기 때문입니다.

 

1. 첫번째방법_ 스트링(문자열)의 기능을 써서 강화함수만들기

#include <iostream>
#include <string>

using namespace std;

void main()
{
	string text = "단검+0";
	int count = 0;
	int input = 0;

	while (true)
	{
		cout << "1. 무기구입 2. 방어구구입 3. 무기강화" << endl;
		cin >> input;

		if (input == 3)
		{
			count = stoi(text.substr(text.find("+") + 1));
			count++;
			text = text.substr(0, text.find("+") + 1) + to_string(count);

			cout << text << endl;
		}
	}
}

출력 결과

2. 두번째방법_ 확률추가하기

#include <iostream>
#include <time.h> 

using namespace std;

void main()
{
	string weapon;
	cout << "강화하고 싶은 무기는 무엇인가요?";
	cin >> weapon;

	int iUpgrade = 0;
	cout << "Upgrade 기본 수치를 입력하세요 : ";
	cin >> iUpgrade; // 아이템 등급 입력
	srand((unsigned int)time(0));


tryAgain:
	char ask;
	// 강화 확률 구하기
	float fPercent = rand() % 10000 / 100.f;
	cout << "Upgrade : " << iUpgrade << endl;
	cout << "Percent : " << fPercent << endl;

	// 강화 1단계 - 아이템 등급 1 ~ 3
	if (iUpgrade < 4)
	{
		cout << weapon << " 강화 성공!!" << endl;
		cout << weapon << " 강화 수치 : " << ++iUpgrade << endl;
		cout << "강화를 계속 하시겠습니까? (Y/N)";
		cin >> ask;

		if (ask == 'Y')
		{
			goto tryAgain;
		}
	}
	// 강화 2단계 - 아이템 등급 4 ~ 6
	else if (4 <= iUpgrade && iUpgrade <= 6)
	{
		if (fPercent < 50.f)
		{
			cout << weapon << " 강화 성공!!" << endl;
			cout << weapon << " 강화 수치 : " << ++iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
		}
		else
		{
			cout << weapon << " 강화 실패" << endl;
			cout << weapon << " 강화 수치 : " << --iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
		}
	}
	// 강화 3단계 - 아이템 등급 7 ~ 9
	else if (7 <= iUpgrade && iUpgrade <= 9)
	{
		if (fPercent < 40.f)
		{
			cout << weapon << " 강화 성공!!" << endl;
			cout << weapon << " 강화 수치 : " << ++iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
		}
		else
		{
			cout << weapon << " 강화 실패" << endl;
			cout << weapon << " 강화 수치 : " << --iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
		}
	}
	// 강화 4단계 - 아이템 등급 9
	else if (iUpgrade == 9)
	{
		if (fPercent < 30.f)
		{
			cout << weapon << " 강화 성공!!" << endl;
			cout << weapon << " 강화 수치 : " << ++iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
		}
		else
		{
			cout << weapon << " 강화 실패" << endl;
			cout << weapon << " 강화 수치 : " << --iUpgrade << endl;
			cout << "강화를 계속 하시겠습니까? (Y/N)";
			cin >> ask;
			if (ask == 'Y')
			{
				goto tryAgain;
			}
			
		}
	}
}

 

출력결과

 

728x90