2

古いリスク ボード ゲームのバージョンを作成しました。java.util.Random軍隊が互いに攻撃するときのダイスロールを実装するために使用しています。たとえば、3 つの軍隊が 2 つの軍隊を持つ領土を攻撃する場合、合計 5 つのダイスを「ロール」する必要があります。

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...
// ...

「混乱」が多すぎるという苦情が異常に多くなっています。たとえば、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 の攻撃で、攻撃方法を 20,000 回のバッチで実行してみましたが、攻撃者は 91% の確率で勝利しました。これは、このゲームのウィキペディア ページに記載されている 97% の勝率よりもはるかに低い値です。

ウィキペディアのオッズ

ああ。

------更新(再)-------------

実際、私は偶然 1 スロット後ろのチャートを見ていたのですが、私の数値はチャートの内容と一致しています。

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      

ですから、動揺が起こる可能性があることを除いて、私がユーザーに何を伝えることができるかわかりません.

4

1 に答える 1

2

100の軍隊(最小合計ロール100)が2の軍隊(最大合計ロール12)にどのように負けることができますか?確かに、あなたの論理はさらに下で正しいと確信していますか?

RandomFWIWあなたが投稿したスニペットは問題ないように見えますが、ディストリビューションの小さな欠点が測定可能な違いを生むとは想像できません。

于 2012-04-24T17:29:40.353 に答える