【问题标题】:Random numbers not random随机数不是随机的
【发布时间】:2012-10-04 02:46:39
【问题描述】:

我正在用 Java 制作一个需要骰子的游戏。攻击者有 3 个骰子,防御者有 2 个骰子。这是我将所有骰子的眼睛随机化的代码:

        if (attacker.getArmies() > 1)
            aDices[0] = random.nextInt(6) + 1;
        if (attacker.getArmies() > 2)
            aDices[1] = random.nextInt(6) + 1;
        if (attacker.getArmies() > 3)
            aDices[2] = random.nextInt(6) + 1;
        if (defencer.getArmies() > 0)
            dDices[0] = random.nextInt(6) + 1;
        if (defencer.getArmies() > 1)
            dDices[1] = random.nextInt(6) + 1;

但是为什么'防御'骰子的数量大多高于'攻击'骰子?

我正在使用 java.util.Random 中的 Random 类

【问题讨论】:

  • 你能证实你的说法吗?
  • 多少次你的意思是我的“大部分更高”?
  • 你为你的随机数生成器播种了吗?
  • 我不用看就知道是哪个呆伯特 ;-)

标签: java random


【解决方案1】:

看到您使用完全相同的功能进行攻击和防御,攻击者的结果在结构上更高是根本不可能的。您可以尝试说服自己的是编写一个小函数,将骰子掷骰子 100 次作为攻击和防御并计算平均值。即使这样,仍然有可能在 100 次之后,攻击赢得 100 次,不太可能,但可能。这就是随机性的本质。

这是关于随机性的一些背景信息的简短读物:

http://engineering.mit.edu/live/news/1753-can-a-computer-generate-a-truly-random-number

【讨论】:

    【解决方案2】:

    也许您应该将 Random 类与 PC 时钟中的时间戳结合使用。 它被称为随机化器的种子。

    【讨论】:

      【解决方案3】:

      看起来你展示的代码比原来的 Risk 给防御者更多的优势;

      if (attacker.getArmies() > 1)          // 1 army will never roll the dice
          aDices[0] = random.nextInt(6) + 1;
      
      • 攻击者每次攻击的军队 (1-3) 获得 1 次骰子。你给他0-2。这意味着单兵进攻永远不会成功。
      • 防守方每防守一支军队 (1-2) 可获得 1 次骰子。你给他 1-2。

      这将使比赛比最初的风险更倾向于防守方,所有这些都不会得到有偏见的随机数

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 2013-11-12
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多