일본산 온라인 과금 게임같은 경우 랜덤박스로 카드를 뽑을 수 있는 시스템이 있습니다. 여기서 나오는 카드의 등급은 희소성을 기준으로 SSR(Super-super Rare), SR(Super Rare), R(Rare) 등 총 3개의 등급으로 나뉩니다. 지금 작성할 예제는 10개의 카드를 무작위로 뽑는 프로그램인데요, 카드 등급별로 나오는 확률이 전부 다릅니다.
**SSR** : 3%
*SR* : 10%
R : 87%
카드 슬롯 중 9개는 위의 확률로 카드가 나오게 되며, 마지막 칸은 무조건 SR 등급 이상의 카드가 나오도록 예외사항을 두겠습니다. 하지만 SSR의 확률은 여전히 3%를 유지해야 합니다. 즉, 마지막 카드의 출현 확률은 SSR 3%, SR 97%입니다.
public class Random01 { public static void main(String[] args) { System.out.print("| "); double randombox; for (int i = 1; i <= 9; i++) { randombox = (int) (Math.random() * (100 - 1 + 1) + 1); if ( 1 <= randombox && randombox <= 3 ) System.out.print("**SSR**"); else if ( 4 <= randombox && randombox <= 13 ) System.out.print("*SR*"); else System.out.print("R"); System.out.print(" | "); } // 마지막은 무조건 SR 이상 등급이 나오게 randombox = (int) (Math.random() * (100 - 1 + 1) + 1); if ( 1 <= randombox && randombox <= 3 ) System.out.print("**SSR**"); else if ( 4 <= randombox && randombox <= 100 ) System.out.print("*SR*"); System.out.print(" |"); } }
| R | R | R | R | R | R | *SR* | R | R | *SR* |
임의의 난수를 발생시키는 메소드로 Math.random을 사용합니다. 이 메소드를 실행하면 0~1 사이에 있는 임의의 난수가 반환됩니다. 메소드를 통해 특정 범위 내에서 난수를 발생시키고 싶을 경우 다음과 같이 사용합니다.
Math.random() * (최대 - 최소 + 1) + 최소
0개의 댓글