프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by warehouse83

게임과 확률의 관계는 꽤 밀접하다. 과거 PC게임이 없던 시절에도 사람들은 RPG를 즐겼다. D&D라고도 불리는 이 게임은 사람들이 테이블에 둘러앉아 판타지 소설에 나오는 직업들(전사, 마법사, 성직자등등)을 각자 맡아 진행자가 들려주는 이야기의 모험을 즐기는 게임이다.

Welcome to the D&D World!

Welcome to the D&D World!

이 게임을 진행시키는 가장 중요한 요소는 주사위이다. (D&D에서 사용되는 주사위는 6면체 말고도 8면체부터 21면체까지 다양하다.)

tumblr_maoeeqchfX1rh6vpho1_500

나누고 나누고 나눠 봅시다.

주사위를 굴려 나온 숫자에 따라 전투가 진행되고 이야기의 흐름에 적절한 방해도 받고 하는 것이다. (적절한 방해와 장애물은 이야기에 몰입하는데 매우 중요하다.)

이러한 주사위 확률 룰은 그 뒤 D&D가 PC의 RPG게임으로 변하면서도 계속 유지되어 오고 있는 중요한 요소이다.

확률은 매우 중요한 게임 요소이다. 그리고 게임 외적으로도 중요한 요소이기도 하다.

그렇다면 이러한 확률은 어떻게 테스트를 할까?

테스터에게 이런 과제가 주어졌다.

“고블린 사냥을 성공 했을 시 ‘고블린의 귀’ 아이템이 1/10 확률로 받게 되어 있다. 고블린의 귀가 1/10 확률로 받을 수 있는지 확인해 달라.”

테스터는 고블린을 10번 사냥했고 ‘고블린의 귀’ 아이템은 안타깝게도(?) 3개가 나왔다.

그렇다면 테스트 결과는 실패한 것일까?

테스터는 생각한다.

테스터는 생각한다.

아니다. 확률에 대한 코드는 정상적으로 동작했고. 그 결과. ‘고블린의 귀’ 아이템은 나오거나. 나오지 않는 결과가 나온 것이다.

확률 코드에 대해 좀 더 구체적인 결과를 얻고 싶다면 1/10 과 1/100 확률이 나오는 테스트를 할 것이 아니라 1/10, 10/10 에 대한 확률을 테스트 하는 것이 좋을 것이다.

위와 같은 테스트 통해 테스터는 다음과 같은 결과를 얻을 수 있다.

1/10 – 1,2번의 당첨

10/10 – 10번의 당첨

경계값을 좀 더 고려하고 싶다면 9/10을 추가 할수도 있다. 받을 때보다 못 받는 경우가 더 적어야 정상이다.

그리고 테스터는 확률 코드가 정상임을 확인 할 수 있다.

아마도 확률의 이런 부분에 대해 “아니 그럼 이 희귀템이 정말 서버 통틀어 하나 정도면 나와야 하는데 확률을 못 믿으면 어떻 하나요?” 라고 생각 할 수도 있다.

어... 그건.. 그러니까..

어… 그건.. 그러니까..

정말 서버 통틀어 하나만 나와야 하는 희귀 아이템이고 제약에 대한 부분이 필요하다면 확률 외에 해당 아이템이 한번 이라도 나오면 그 뒤로는 나오지 않는 조건이 코드에 추가되어야 한다.

나는 실제로 그런 상황을 본 적이 있다. 이벤트로 확률에 의해 당첨되는 아이템이 확률에만 의존하여 기획자의 의도와 다르게 생각했던 수량보다 더 나간 것이다. 아마도 수량의 제약까지 있었으면 문제는 발생하지 않았을 것이다.

 

한번 확률만 있어도 되는 경우와 확률과 제약이 같이 있어야 하는 경우를 나눠 보았다.

확률만 있어도 되는 경우

전투 시의 확률 (공격율,방어율,회피율)

파티 플레이 시 루팅 확률

루팅되는 아이템이 밸런스상 기획자의 제약 안에 있지 않아도 되는 경우

 

확률과 제약이 같이 있어야 하는 경우

이벤트 시 당첨되는 상품 수량이 제한되어 있을 경우

루팅되는 아이템이 밸런스 상 기획자의 제약 안에 있어야 하는 경우

 

P.S 디아블로 같은 게임은 유니크템이 떨어지는데 제한이 있지 않다. (디아2 말기 그 귀한 조던링이 뭉치로 돌아다녔다.) 결국 제한을 거느냐 마느냐도 해당 게임의 게임성에 따라서 기획자가 정할 일이다. 가정으로 서버 하나에서 모든 유저들이 최고의 무기를 가지기 위해 서로 싸우는 게임이 있고 그 무기가 조던링같이 루팅이 된다면 모든 유저들에게 해당 게임을 하는 목표가 사라지기 때문에 안 될 것이다.


P.S2 아이구 오랫만에 글을 쓰네요. 최근에 게임 오픈 시키고 주말 모니터링차 회사 나와서 겸사겸사 글을 작성했습니다. 앞으로 시간이  나는대로 다시 글 올리도록 하겠습니다. :)

댓글을 달아 주세요

  1. Favicon of http://lunapiece.net lyn 2013.01.06 22:38  댓글주소  수정/삭제  댓글쓰기

    알고리즘도 중요하죠...

    단순히 범위로 랜덤을 계산했는데 사용한 랜덤알고리즘이 가우시안 분포면 지못미 (...)

    • Favicon of https://gamedevforever.com warehouse83 2013.01.07 14:32 신고  댓글주소  수정/삭제

      어떤 기획에 따라 어떤 알고리즘이 사용되느냐도 테스트 전에 확인해야하는 중요한 사항인 것 같습니다.
      좋은 의견 감사합니다. :)

  2. 마루 2013.01.07 10:49  댓글주소  수정/삭제  댓글쓰기

    확률의 분포는 대충 예측 범위의 +- 3까지 입니다. 이것을 벗어나면 확률을 의심해 보아야 합니다.
    10% 정도는 100개 테스트 해서 7-13개 정도 나오면 정상범위이고 이것이 벗어나면 확률 알고리즘이나 계산에 문제가 있다고 봐야 합니다. 정확한 수치 계산을 하시려면 고등학교 수학에 나오는 확률과 검증부분을 참조하시면 됩니다.
    두번째 랜덤함수를 어떤 것을 쓰는지 확인하셔야 합니다. 어떤 랜덤함수(윈도우 시스템 기본랜덤함수)는 가지수가 약 3만 개만 나옵니다. 10% 정도는 문제가 거의 없지만, 0.001 % 의 값은 나오지 않습니다. 그렇다고 랜덤을 2번 쓰는 것은 더더욱 예상하지 못한 문제(실제 값들에서 어떤 값들은 전혀 발생을 안한다던가하는)가 발생을 합니다.
    세번째 확률에 수량제한을 둘 경우 초기에 소진 되는 경우가 생깁니다. 복권과 같이 구매하는 사람의 수가 당첨되는 사람의 수에 영향을 주는 경우에는 문제가 없지만, 사냥의 경우 문제가 생길 수 있습니다.

    • Favicon of https://gamedevforever.com warehouse83 2013.01.07 14:31 신고  댓글주소  수정/삭제

      개발자분이 기본 랜덤 함수 말고 자기만의 랜덤 함수를 만들어내는 알고리즘을 만들어 냈다면 좀 더 깊이를 가지고 테스트를 해야 될 필요는 있다고 생각합니다.
      좋은 의견 감사드립니다. 저도 좀 더 생각해 봐야겠네요. :)

      그리고 제한에 대한 의견은 본문에도 드렸지만 당연히 분류되어 사용할 필요성이 있습니다.

  3. 평안 2014.03.17 04:23  댓글주소  수정/삭제  댓글쓰기

    요새 엔진을 뒤적거리다 궁금한 점이 생겼습니다... 게임에서 확률값은 일반적으로 벨류가 어떻게 지정되나요 예를들어 70프로라면 일반적으로 4바이트로 지정할때 어떻게 지정하는지 궁금합니다.