My작품

C++ 가챠 시뮬레이터 (Type B)

샤핑 2020. 12. 26. 19:35
728x90
반응형

심심풀이용으로 C++ 코딩을 해보았습니다. 예전처럼 C++ 가챠 시뮬레이터를 만들어 보았는데요. 하지만 이번에 만든 프로그램은 지난번에 만들었던 가챠 시뮬레이터하고는 많이 다릅니다.

지난번에 만든 프로그램에서는 사용자가 지정한 확률 그대로 단순히 가챠가 진행되었지만, 이번에 만든 프로그램은 소비한 자원값에 따라 확률이 변하는 가챠 시뮬레이터 입니다. 당연히 자원을 많이 소비할수록 고성 캐릭터가 나올 확률이 높아지겠죠?

이 방식은 일본게임에서는 잘 사용되지 않는 방식이죠. 대표적으로 '소녀전선'에서 사용되는 가챠 방식입니다. 하지만 제가 구현한 알고리즘이 소전에서 적용한 가챠 알고리즘과 동일한지는 알 수 없다는거 ㅠㅠ

우선 시작하겠다는 표시로 'y'를 입력했고 가챠에 소비할 수 있는 최대값을 100으로 입력했습니다. 가챠를 돌리는 데에 최대 100까지 소비할 수 있다는 뜻입니다.

이 상태로 가챠를 3번 돌려보겠다고 입력했구요. 가챠 결과를 정리하면 다음과 같습니다.

1. 11(최소값) 만큼 소비 → 1성(★☆☆☆☆) 등장

2. 11 만큼 소비 → 1성(★☆☆☆☆) 등장

3. 11 만큼 소비 → 1성(★☆☆☆☆) 등장

소비를 적게 하니 고성 캐릭터도 잘 안나오는 것을 볼 수 있습니다 ㅠㅠㅜ

프로그램을 한번 더 돌려보았습니다. 이번에는 소비값만 다르게 하고 나머지는 동일한 조건에서 진행하였습니다.

1. 100(최대값) 만큼 소비 → 1성(★☆☆☆☆) 등장

2. 100 만큼 소비 → 5성(★★★★★) 등장

3. 100 만큼 소비 → 2성(★★☆☆☆) 등장

소비를 많이하니까 고성 캐릭터도 보다 잘 등장하는 것을 볼 수 있죠?? ㅋㅋ

(하지만 의외로 너무 쪼잔하다... 흑 ㅠ)

이제 핵심이 되는 소스코드만 설명하겠습니다.

※ 가독성을 최대한 높이기 위해 이미지로 제시하였습니다. 아래의 소스코드는 맨 아래쪽에서 다운받으실 수 있습니다.

각 레어의 기본 확률값과 소비한 자원값을 가지고 가챠 배열을 세팅해주는 함수입니다. 소비한 자원값을 1~10 숫자로 변환시킨 뒤 레어의 기본 확률값과 곱해줍니다. 이렇게해서 나온 숫자만큼 배열을 레어 숫자로 채워주는 방식입니다.

(배열에 채워지는 양) = (기본 확률 값) * (1~10 숫자로 변환된 자원값)

예를 들어 2성 등장 확률이 4% 이고 자원을 최대값인 100만큼 투자하였다면, 최대값만큼 투자했으니 당연히 1~10 중 10으로 변환되겠지요? 4 * 10 = 40 이므로, 숫자 2가 배열에서 40만큼 채워지는 것입니다.

이 프로그램의 경우 레어의 기본 확률값은 아래와 같이 세팅되어 있습니다.

5성: 1%

4성: 2%

3성: 3%

2성: 4%

1성: 90%

그러나 위의 공식은 최하위 레어(위의 경우 1성)에서는 적용되지 않습니다. 최하위 레어는 계산 후 남은 빈 공간을 전부 채워넣는 방식을 사용하였습니다.

가챠 배열 속에 있는 값들을 섞어주는 함수입니다. 섞지 않고 그대로 두면 좀 그렇지 않을까 해가지고 한번 적용해보았죠 ㅎㅎ 배열 내부를 섞을 때는 랜덤 갯수만큼 랜덤 자리 2개를 swap하는 방식을 사용했습니다.

가챠 배열을 이용해 가챠를 돌려보는 함수입니다. 이 함수가 해당 프로그램에서 가장 핵심이 된다고 볼 수 있습니다.

rand() 함수를 통해 배열 index 값을 랜덤으로 받아 레어 숫자를 결과값으로 얻고, 결과 값을 저장해 출력해주는 방식입니다. 확률값과 소비한 자원값에 따라 배열 내의 값을 세팅해주었기 때문에, 소비값만큼 확률이 지정되고 결과가 제대로 출력됩니다. 이렇게 C++로 새로운 가챠 시뮬레이터를 만들어 보았습니다. 소스 파일도 업로드해드리니 필요하신 분들은 다운받아서 참고하시면 되겠습니다.

 

 

<소스 코드>

https://github.com/jhs951101/GachaSimulatorB 

728x90
반응형
LIST