필자는 Neople에서 개발하고 Nexon에서 서비스를 하는 게임인 Dungeon & Fighter을 즐겨한다.

이 게임 내에서 상위 던젼이나 레이드를 가기 위해서는 최소 +11 의 무기가 필요하다.

그런데 길드원을 보면 +12를 가는데 3000만골드가 들었다는 사람이 있고 또 다른사람은 10억골드 이상을 사용한 사람도 있다.

import random as rand
import numpy as np

print("강화기!!!!!")


"""
4 → 5 부터 reinfo[0]
"""
gold = 354600
cube = 120
reinforce = [0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.259, 0.18, 0.171, 0.16, 0.14]
gold_gop = [2, 2.2, 2.4, 2.6, 2.8, 3, 3, 5, 8, 12, 17]

print("원하시는 강화등급을 넣어주세요 (14까지 구현됨)")
want = int(input())

"""
변수들
"""
cube_usuage = 0
gold_usuage = 0
item_grade = 0
trying = 0
data = []

for i in range(1000):
    while(True):

        if item_grade == 0:
            trying += 1
            cube_usuage += 10
            gold_usuage += gold
            item_grade += 1
            print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))

        elif item_grade == 1:
            trying += 1
            cube_usuage += 20
            gold_usuage += gold
            item_grade += 1
            print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))

        elif item_grade == 2:
            trying += 1
            cube_usuage += 30
            gold_usuage += gold
            item_grade += 1
            print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))

        elif item_grade == 3:
            trying += 1
            cube_usuage += 40
            gold_usuage += gold
            item_grade += 1
            print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))

        elif item_grade == 4:
            trying += 1
            cube_usuage += 50
            gold_usuage += gold * gold_gop[0]
            item_grade += 1
            print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))

        elif item_grade == 5:
            trying += 1
            cube_usuage += 60
            gold_usuage += gold * gold_gop[1]
            if reinforce[0] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 1
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 6:
            trying += 1
            cube_usuage += 70
            gold_usuage += gold * gold_gop[2]
            if reinforce[1] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 1
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 7:
            trying += 1
            cube_usuage += 70
            gold_usuage += gold * gold_gop[3]
            if reinforce[2] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 1
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 8:
            trying += 1
            cube_usuage += 80
            gold_usuage += gold * gold_gop[4]
            if reinforce[3] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 1
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 9:
            trying += 1
            cube_usuage += 90
            gold_usuage += gold * gold_gop[5]
            if reinforce[4] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공! ".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 1
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 10:
            trying += 1
            cube_usuage += 100
            gold_usuage += gold * gold_gop[6]
            if reinforce[5] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 3
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 11:
            trying += 1
            cube_usuage += 120
            gold_usuage += gold * gold_gop[7]
            if reinforce[6] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade -= 3
                print(" 현재 +{} ".format(item_grade))

        elif item_grade == 12:
            trying += 1
            cube_usuage += 140
            gold_usuage += gold * gold_gop[8]
            if reinforce[7] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade = 0
                print(" 무기가 터졌습니다....")

        elif item_grade == 13:
            trying += 1
            cube_usuage += 160
            gold_usuage += gold * gold_gop[9]
            if reinforce[8] > rand.random():
                item_grade += 1
                print("+{0} → +{1} 강화 성공!".format(item_grade - 1, item_grade))
            else:
                print("+{0} 강화 실패!".format(item_grade), end="")
                item_grade = 0
                print(" 무기가 터졌습니다....")

        if item_grade == want:
            print("총 {0}번의 시도, {1} 골드, {2} 개의 큐브를 사용하였습니다!".format(trying, gold_usuage, cube_usuage))
            gold_usuage = gold_usuage + (cube * cube_usuage)
            data.append([trying, gold_usuage])
            item_grade, trying, gold_usuage, cube_usuage = 0, 0, 0, 0
            break

data = np.array(data)

plt.title("D&F +12 Weapon Reinforsement")      # 차트 제목
plt.hist(data, bins=1000)
plt.xlabel("KRW")
plt.ylabel("Success")
plt.show()

data.mean()