본문
아이템 Drop 확률 조작 로직 만들기 version 01(JAVA)
프로그래밍/Java 2016. 10. 17. 00:12
반응형
# 아이템 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의정석(남궁성 저)
반응형
댓글