2

我已经制作了旧风险棋盘游戏的一个版本。当军队互相攻击时,我用java.util.Random它来实施掷骰子。例如,当 3 支军队用两支军队进攻一个领土时,我必须总共“掷” 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% 胜率:

来自维基百科的赔率

啊。

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

实际上,我不小心在看图表后面一个插槽,我的数字与图表的内容一致:

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)?确实,您确定您的逻辑在更远的地方是正确的吗?

FWIW 您发布的片段看起来不错,我无法想象Random发行版中的微小缺陷会产生可衡量的差异。

于 2012-04-24T17:29:40.353 回答