본문

아이템 Drop 확률 조작 로직 만들기 version 01(JAVA)

반응형

아이템 Drop 확률 조작 로직 만들기 version 01


source) RandomEx02.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package randomEx;
 
import java.util.HashMap;
import java.util.Iterator;
 
public class RandomEx02 {
    static final int REPETITION = 100;
 
    public static void main(String[] args) {
        // A의 가중치를 다른 값의 두 배로 한다.
        String[] data = { "A""A""B""C" };
 
        HashMap map = new HashMap();
 
        for (int i = 0; i < REPETITION; i++) {
            String temp = getRandArr(data);    // 배열에 저장된 값 중 하나를 반환한다(랜덤)
            if (map.containsKey(temp)) {
                Integer value = (Integer) map.get(temp);
                map.put(temp, new Integer(value.intValue() + 1));
            } else {
                map.put(temp, new Integer(1));
            }
        }
 
        Iterator it = map.keySet().iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            Integer value = (Integer) map.get(key);
            int intValue = value.intValue();
            System.out.println(key + " : " + printGraph('#', intValue) + intValue);
        }
    }
 
    private static String printGraph(char ch, int value) {
        char[] bar = new char[value];
 
        for (int i = 0; i < bar.length; i++) {
            bar[i] = ch;
        }
 
        return new String(bar);
    }
 
    private static String getRandArr(String[] arr) {
        return arr[getRand(arr.length - 1)]; // 배열에 저장된 값 중 하나를 반환한다.
    }
 
    private static int getRand(int n) {
        return getRand(0, n);
    }
 
    private static int getRand(int from, int to) {
        return (int) (Math.random() * (Math.abs(to - from) + 1)) + Math.min(from, to);
    }
 
}
 
cs


result)

1
2
3
A : #######################################################55
B : ##################18
C : ###########################27
cs


배열 data에 각 데이터의 개수를 조절함으로써 특정 데이터에 가중치를 주어 발생빈도를 높일 수 있다. A의 가중치가 다른 데이터의 두 배이므로 결과에서 빈도수가 다른 데이터보다 약 두 배 정도 높은 것을 알 수 있다. 시행회수가 100번 밖에 안돼서 다소 오차가 크지만, 시행회수가 클수록 오차는 줄어들어서 지정한 가중치에 근접할 것이다. 이 예제를 테트리스게임에 응용하면, 특정 블럭이 더 자주 나오도록 조절하는 것이 가능 할 것이다.


- 출처 : JAVA의정석(남궁성 저)

반응형

공유

댓글