古いリスク ボード ゲームのバージョンを作成しました。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
ですから、動揺が起こる可能性があることを除いて、私がユーザーに何を伝えることができるかわかりません.