RPG 게임을 하다가 ( ㅡㅡ; )  흔히 말하는 '아이템 지르기' 를 했다.

성공할 확률은 60%. 즉, 10 번 시도하면 6번은 성공한다는 말인데... 도대체 왜 자꾸 아이템을 날려 먹는것이냐고..

그래서 확률에 대해서 생각을 해보다가 함수를 만들었는데, 목적은 0< p < 1 의 값을 넘겨주면 그 확률(p)에 대한 Boolean 값을 반환하는  함수 이다.

즉, p = 0.1 이 되면 10번 중에 1 번 꼴로 true 값을 반환하는 함수이다.

(분명 어딘가에..  아름다운 알고리즘이 있을테지만...무식한게 용감하다고...)

public function probability(percent:Number):Boolean
         {
             var divvy : Number = Math.min(1,percent);
             divvy = Math.max(0,divvy);
            
             var $i : uint = 0 ;
             var divideValue : Number = 10 ;
            
            
             while(divvy != Math.round(divvy))
             {
                 $i++ ;
                 divvy = divvy * divideValue ;
             }
             var N : Number = Math.floor(Math.pow(divideValue,$i)*Math.random()) ;
             return (N < divvy) ;
         }

예를 들어 다음과 같이 이 함수를 실행하면..

for(var i:uint = 0 ; i < 100 ; i++ )
{
      if(probability(0.03))
      {
trace("성공") ;
       }
}

성공 메세지는 평균 3회 정도 출력된다.


Posted by 웹눈

TRACKBACK | http://webnoon.net/trackback/195 관련글 쓰기

댓글을 달아 주세요