2012-04-24 2 views
2

나는 오래된 위험 보드 게임 버전을 만들었습니다. 나는 군대가 서로 공격 할 때 주사위 굴리기를 구현하기 위해 java.util.Random을 사용하고 있습니다.랜덤 대 SecureRandom 게임에서

Attacker rolls: 3 die 
Defender rolls: 2 die 

int[] rollsAttacker = new int[3]; 
int[] rollsDefender = new int[2]; 

for (int i = 0; i < 3; i++) { 
    rollsAttacker[i] = mRandom.nextInt(6) + 1; 
} 
for (int i = 0; i < 2; i++) { 
    rollsDefender[i] = mRandom.nextInt(6) + 1; 
} 

// compare rolls and figure out who won... 
// ... 

내가 너무 많은 "전복"가 있다는 불만의 비정상적으로 높은 숫자를 받고 있어요 : 3 군대는 두 개의 군대와 영토를 공격 할 때 예를 들어, 나는에 "롤"5 총 다이있다. 예를 들어, 100 명의 군대는 2 명의 군대를 잃을 수도 있습니다. 나는 롤백 방식을 수백만 번 실행하여 승리율/손실률을 테스트했으며 동일한 결과를 보여주는 다른 사이트와 거의 일치합니다.

나는 "더 무작위"일지도 모르는 SecureRandom으로 전환 할 생각 이었지만, 그만한 가치가 있는지 알지 못했습니다. 나는 주 (州) util.Random이 그런 혼란을 너무 자주 일으키고 있을지 모릅니다. 사용자는 모바일 장치에서 재생할 수 있으므로 util.Random을 구현하면 일부 플랫폼에서 차이가 줄어들 수 있습니다. (불만은 특정 브랜드의 전화에서 오는 것으로 보입니다).

그래서 짧은에, 나는 그것이 상당히 느린 있다면, SecureRandom의로 전환하는 것은 내 경우에 도움이 될 것입니다 있는지 확실하지 않습니다, 또는 그냥 제대로 util.Random,

을 사용하지 않는 경우 ----- ------ 업데이트 ----------------

수비수가 전반적으로 승리하는 4 대 1 공격의 예입니다.

Attacking 4 vs 1... 
    Roll: 
    a: 5, 5, 4 
    d: 6 
    Roll: 
    a: 5, 2 
    d: 5 
    Roll: 
    a: 3 
    d: 5 

Defender survived! 

나는 위의 4 1 대 공격 만 실행의 일괄 내 공격 방법을 실행하려고했습니다, 그리고 공격자가 시간의 91 %를 이긴다. 이것은이 게임의 위키 백과 페이지에 넣어 97 %의 성공률보다 훨씬 낮은 :

odds from Wikipedia

아아. (다시)

------ 업데이트 ------------- 사실

, 내 번호는 무엇으로 정렬, 실수로 하나 개의 슬롯 뒤에 차트를보고 있었다 차트가 있습니다

0.4139 0.7502 0.9132 0.97245 0.99015 0.9964 0.9991 0.99975 0.9999 1.0  
0.10865 0.36105 0.649  0.78555 0.8924 0.9343 0.9691 0.98  0.9904 0.9951  
0.02655 0.2065 0.4729 0.6414 0.76725 0.8584 0.9121 0.94605 0.9687 0.982  
0.00665 0.0905 0.3182 0.48215 0.63985 0.7432 0.8304 0.8894 0.9274 0.9525  
0.0015 0.04775 0.20575 0.35955 0.50885 0.64125 0.7389 0.8168 0.8753 0.9164  
5.5E-4 0.0229 0.1323 0.25105 0.39385 0.52695 0.6436 0.7254 0.805  0.86415 
0.0  0.00975 0.0854 0.18075 0.29985 0.42645 0.5389 0.64695 0.72615 0.8009  
5.0E-5 0.00545 0.05515 0.1255 0.2228 0.3307 0.4438 0.54365 0.64505 0.723  
0.0  0.00255 0.03225 0.0877 0.16005 0.2576 0.3519 0.46685 0.559  0.6445  
0.0  0.00125 0.0201 0.0569 0.11595 0.19315 0.2898 0.374  0.47505 0.56275  

그래서 그래 내가 이변이 일어날 수 있다는 점을 제외하고 사용자가 무엇을 말할 수 확실하지.

+0

그런 다음 모든 롤을 기반으로 승자가 결정됩니까? 어쩌면 그것은 논리 결함 일 수 있습니다. –

+5

당신의 논리가 "랜덤 (Random)"이 "충분히 랜덤 (random)"이 아닌 것보다 문제가 많습니다. –

답변

2

100 (최소 총 롤 100)의 군대가 2의 군대 (최대 총 롤 12)에 대해 어떻게 손실 될 수 있습니까? 정말로, 당신의 논리가 정확하다고 확신합니까?

FWIW 게시 한 스 니펫이 괜찮아 보입니다. 배포판에있는 Random의 작은 단점이 측정 가능한 차이를 만들 것이라고 상상할 수 없습니다.

+0

어쩌면 나는 규칙을 잘못 해석하고있다. 100 대 1 시나리오로 단순화하자. 나는 공격자가 굴릴 수있는 최대 다이는 3, 수비수는 2라고 생각했다. 100 대 1의 싸움에서 수비수는 공격 할 때마다 6을 굴릴 수 있다면 공격자를 완전히 물리 칠 수 있을까? – user291701

+0

왜 나는 "위험"게임을 싫어합니다. 규칙은 100 대 1 시나리오에서도 공격하는 군대가 100 개의 주사위가 아니라 최대 3 개의 주사위를 굴릴 수 있다고 말합니다. 최대 3 개의 군대 당 1 개의 주사위입니다. –

+0

@Stephen, 위험에 처하여 공격자가 3 개의 군대를 가지고 있다면 굴릴 수있는 주사위의 최대 수는 2입니다. – GriffeyDog

관련 문제