2012-06-26 4 views
2

두 개의 완전히 다른 메커니즘 (예 : 공격 롤과 피상적 인 임의의 애니메이션)에 대해 Random(). nextInt (int) 정수를 가져올 때 각각의 정비사마다 별도의 Random() 인스턴스를 사용해야하는 이유가 있습니까? 예를 들어, 각 정비공의 무작위 값을보다 균등하게 분산시키는 데 도움이 될 수 있습니까?Java 게임에서 Random() 인스턴스의 지속성?

- 최대 위치를 선택 - 유사

임의의 값의도 분산이 중요 지속적인 게임에서, 랜덤()의 인스턴스 또는 저장된 게임 데이터와 종자를 저장하는 어떤 이유가 매번 새로운 인스턴스를 생성하는 것이 아니라 게임이로드 될 때 중단됩니다.

예를 들어 플레이어가 매 턴마다 운이 좋거나 불행 할 수있는 턴 기반 게임에서 게임로드시 새로운 Random() 인스턴스를 만들면 플레이어가 비정상적으로 운이 좋은 상황이 발생할 수 있습니다 또는 운이 좋지 않은가?

-

(참고 : 나는 "새로운 인스턴스를 생성하는"말할 때 어떤 씨앗이 지정되지와 함께, 나는 그냥 "무작위 랜덤 = 새로운 무작위()"를 사용하여 의미.)

감사합니다!

답변

5

아니요. 이유는 없습니다. 동일한 인스턴스를 사용하십시오. 몇몇 예외를 제외

: 패턴의

  1. 예측 가능성은 원하는이다. 예를 들어, 특정 "솔리테어 게임 번호"를 시드하거나 "임의의 동일한 이벤트가 발생하도록"(예 : 세이브 /로드 "속임수"중지) ;-) 내부 상태가 아닌 PRNG 반복성을 활용하려면 추가 작업이 필요할 수 있습니다 드러난. 이것은 업무 규칙입니다.
  2. 스레딩이 사용되고 입니다. 동일한 임의 인스턴스를 사용하면 성능 문제가 발생합니다. ,

같은 시딩에 문제가 PRNG 순서가 더 자주 일반적으로, 같은 시작됩니다 (따라서 알려진 또는이다 (랜덤. 내가 이전에 잘못 말한, 자바에서 스레드 안전) 같은 원인 충돌] 시퀀스와 "무작위성의 부족"). 그러나 시퀀스의 임의성의 품질은 영향을받지 않습니다. 로

여담 :

새로운 난수 생성기를 만듭니다 다행히도 자바는 꽤 좋은 기본 랜덤 생성자가 있습니다. 이 생성자는 난수 생성기의 시드를이 생성자의 다른 호출과 구별되는 값으로 설정합니다. 그것이로 구현됩니다 JDK 6에서

:

this(++seedUniquifier + System.nanoTime()); 

(물론, 그것은 ... 물론 위의 구현으로 타락한 시나리오를 고안/상상하는 것이 가능) 행복한 코딩.

+1

다른 말로하면 나를위한 추가 작업이 없습니다. 최고의 해답! 감사! ;) –