[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
'코딩 1막 <C++개념편> > 코딩 1막 <C++응용편>' 카테고리의 다른 글
[C++] 벡터를 사용해서 출석부만들기 (0) | 2022.06.14 |
---|---|
[C++] 벡터의 기능을 이용해보자 (0) | 2022.06.14 |
[C++] 생성한 문자열 공백없애는 함수 만들기 (0) | 2022.06.14 |
[C++] 가상함수를 써서 플레이어를 생성하는 함수를 호출해보자 (0) | 2022.06.13 |
[C++] 구조체 만들고, 상속해보고, 오버로딩, 오버라이딩 및 가상함수 구현해보기 (0) | 2022.06.10 |