전장 - 레벨업과 기물
하스스톤 전장이란?
하수인 종족과 레벨
- 하수인은 레벨과 종족값을 가집니다.
- 종족값은 (멀록, 야수, 용, 기계, 악마, 해적, 정령, 가시멧돼지, 중립) 중 하나입니다.
- 하수인 레벨에 따라 하수인 기물의 수는 (1성-18장, 2장-15장, 3성-13장, 4성-11장, 5성-9장, 6성-6장) 입니다.
레벨 업(선술집 강화)
- 선술집 단계 이하의 하수인이 상점에 등장합니다.
- 만약 선술집 단계가 3단계면 1성,2성,3성 하수인이 등장합니다.
새로고침(리롤)
- 새로고침 시 상점에 있던 모든 하수인이 새로운 하수인으로 변경됩니다.
상세 조건
- 현재 10골드를 가지고 있으며, 선술집 강화 비용은 0원이라고 가정합니다.
- 선술집 레벨은 1~6까지 있으며, 선술집 레벨에 따라 상점에 나타나는 하수인의 수는 (1성-3마리, 2성-4마리, 3성-4마리, 4성-5마리, 5성-5마리, 6성-6마리) 입니다.
- 하수인 레벨에 따라 하수인 기물의 수는 (1성-18장, 2장-15장, 3성-13장, 4성-11장, 5성-9장, 6성-6장) 입니다.
- 아무도 기물을 사지 않았다고 가정합니다.
- 게임이 시작될 때 '중립'을 제외한 무작위 3가지 종족을 선택, 해당 종족의 하수인은 이번 게임에서 등장하지 않습니다.
- 종족세트에 포함되는 중립카드는 고려하지 않습니다.
- 상점에 동시에 나타나는 하수인은 비복원실행으로 나온다고 가정합니다.
- 각 종족의 레벨별 서로다른 기물의 종류는 다음과 같습니다.
멀록 = {1성:2개, 2성:3개, 3성:3개, 4성:1개, 5성:2개, 6성:1개}
야수 = {1성:2개, 2성:3개, 3성:2개, 4성:2개, 5성:4개, 6성:4개}
용 = {1성:2개, 2성:1개, 3성:3개, 4성:4개, 5성:2개, 6성:2개}
기계 = {1성:2개, 2성:3개, 3성:3개, 4성:4개, 5성:1개, 6성:3개}
악마 = {1성:2개, 2성:2개, 3성:2개, 4성:2개, 5성:3개, 6성:3개}
해적 = {1성:2개, 2성:3개, 3성:3개, 4성:3개, 5성:2개, 6성:3개}
정령 = {1성:2개, 2성:2개, 3성:3개, 4성:3개, 5성:1개, 6성:3개}
가시멧돼지 = {1성:2개, 2성:2개, 3성:4개, 4성:4개, 5성:1개, 6성:3개}
중립 = {1성:2개, 2성:7개, 3성:6개, 4성:6개, 5성:9개, 6성:4개}
문제 정의
레벨업을 하기 전과 후 N성짜리 기물이 등장할 확률의 차이는?
murloc = {1:2, 2:3, 3:3, 4:1, 5:2, 6:1}
beast = {1:2, 2:3, 3:2, 4:2, 5:4, 6:4}
dragon = {1:2, 2:1, 3:3, 4:4, 5:2, 6:2}
machine = {1:2, 2:3, 3:3, 4:4, 5:1, 6:3}
demon = {1:2, 2:2, 3:2, 4:2, 5:3, 6:3}
pirate = {1:2, 2:3, 3:3, 4:3, 5:2, 6:3}
elemental = {1:2, 2:2, 3:3, 4:3, 5:1, 6:3}
quilboar = {1:2, 2:2, 3:4, 4:4, 5:1, 6:3}
neutral = {1:2, 2:7, 3:6, 4:6, 5:9, 6:4}
ban_lst = ['murloc','beast','dragon','machine','demon','pirate','elemental','quilboar']
import random
#8개의 종족 중 3개를 제외합니다
now_card = random.sample(ban_lst,5)#비복원추출
#중립카드는 반드시 사용되기 때문에 중립카드를 기준으로
deck = neutral.copy()
#이번게임에서 사용되는 종족의 카드들을 추가합니다
for name in now_card:
cnt=1
for v in eval(name).values():#eval을 써서 문자열을 변수로 가져옵니다
deck[cnt] += v
cnt+=1
# 기물의 종류에 기물의 수를 곱합니다
how_many = {1:18,2:15,3:13,4:11,5:19,6:6}
cnt = 1
for v in how_many.values():
deck[cnt] *= v
cnt+=1
#레벨별로 상점에 몇 개의 하수인이 등장하는지를 나타냅니다
shop_minion_variable = {1:3,2:4,3:4,4:5,5:5,6:6}
def func(shop_lv,want_minion_lv):
if shop_lv<want_minion_lv: #상점의 레벨보다 높은 하수인이 등장할 수는 없습니다
print("It doesn't exist")
return False
deno = 0
for i in range(1,shop_lv+1):
deno += deck[i] #상점 단계가 shop_lv일 때 나올 수 있는 모든 하수인의 수 입니다
return (how_many[want_minion_lv] /deno )*shop_minion_variable[shop_lv] #(원하는 기물 / 나올 수 있는 기물) * 기물 등장 횟수
10번의 리롤을 했을 때 원하는 N성짜리 기물이 등장하지 않을 확률은?
def func2(shop_lv,want_minion_lv):
return (1-func(shop_lv,want_minion_lv))**10
#print(func2(6,1)) #0.46~ 6레벨에 10원 리롤 해서 원하는 1성 기물을 발견하지 못할 확률은 46%
#print(func2(6,6)) #0.78~ 6레벨에 10원 리롤 해서 원하는 6성 기물을 발견하지 못할 확률은 78%
느낀점
- 해당 게임을 모르는 사람에게 어떤 정보를 제공해야 할 지에 대한 고민이 많았다.
- 상세 조건을 리스트업 하면서 실제 게임과 동일한 확률을 구하는 건(게임의 환경과 똑같이 구현하는 건) 어렵다.
하스스톤 공식 홈페이지는 너무 구리다.
Author And Source
이 문제에 관하여(전장 - 레벨업과 기물), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qwerty1434/하스스톤-전장저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)