【问题标题】:Simulate 5 die roll for Yahtzee game模拟 Yahtzee 游戏的 5 掷骰子
【发布时间】:2013-03-07 10:57:30
【问题描述】:

我正在尝试为我在 MATLAB 中编写的 Yahtzee 游戏模拟滚动 5 个骰子,但我遇到了一个问题,即我的代码在运行 1000 多次迭代后似乎没有生成任何 yahtzee。我是否使用了保证 Yahtzee(相同数量的 5 个)被滚动的函数?

while rounds<=13
    fprintf('Rolling the dice...\n');
    roll=randi(6,1,5);
    roll=sort(roll);
    fprintf('You rolled:');
    disp(roll);
    rollCount=rollCount+1;

    for x=rule
        if roll==rule{1};
            fprintf('Condition Met');
            break;
        end
    end
    rounds=rounds+1;

end

这基本上只是迭代 13 轮滚动,并根据“规则{1}”检查滚动,该数组包含 [1 1 1 1 1]。获得 3 个,有时是 4 个 1s 似乎没有问题,但我无法获得 5 个。有什么建议吗?

【问题讨论】:

  • 6^5 是 7776。您不应该期望 [1 1 1 1 1] 经常迭代 1,000 次。
  • 多哈。我想你是对的。没想到概率这么低。我将其更改为 10000 次迭代,我可以看到它在获得正确的序列后停止。感谢您的帮助。

标签: matlab random dice


【解决方案1】:

正如 Ryan Cavanaugh 指出的那样,没有足够的样本来捕捉想要的结果。我提高了模拟运行 10000 次,它按预期工作。

【讨论】:

  • 您的代码也存在缺陷。你说“if roll==rule{1}”,但它必须是“if roll==x{1}”。
  • 嗯,如果我将其更改为您的建议,我会收到错误消息“矩阵尺寸必须一致。” rule 是一个数组,roll 是一个 5 位数的数组。 for 循环试图做的是逐步遍历 rule 中的每个数组,看看 roll 是否匹配它。你能修复整个块让它像那样工作吗?我不确定我的代码是否这样做。
  • 就目前而言,您的代码会根据规则重复检查您的滚动{1},而不是检查每条规则。如果您发现它抱怨矩阵维度,您应该检查是否所有规则都输入了正确的维度 - 也就是说,您没有插入一些作为行向量和一些作为列向量。另外值得检查的是您是否需要大括号 - 它可能只需要“if roll==x”。我用的是Octave,需要大括号索引,不知道Matlab有没有。
  • 这里的示例代码只是为了检查并确保滚动是随机的,并且逻辑可以用于检查规则。在最终结果中,它将检查所有规则。你能解释一下我会怎么做吗?如何根据规则中的每个数组检查我的滚动数组?在 C++ 中,它类似于: for(int i =0;i
  • for x = 1:5 if roll == rule{x} 应该假设规则看起来像 {[1 1 1 1 1], [2 2 2 2 2]...} 但只检查if(roll(1) == mean(roll)) 会更容易因为这只是检查所有 5 卷是否相同,而不管它们的值如何,因此消除了循环的需要
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 2016-02-07
  • 1970-01-01
  • 2015-12-24
  • 2012-02-29
  • 2018-10-19
相关资源
最近更新 更多