在Matlab上玩Yahtzee?

时间:2012-11-21 16:05:17

标签: matlab probability

Yatzi是一个用5个骰子滚动的游戏。我的功能Yatzi模拟了5个骰子的滚动。该函数应该输入一个输入,N umR olls,即5个骰子将被滚动的总次数。该函数应具有四个输出,按顺序给出以下场景的相对频率(概率):

  • 5个骰子显示数字1,2,3,4和5
  • 两个,只有两个,骰子
  • 显示数字2至少两个显示数字4的骰子
  • 所有5个骰子显示相同的数字

这是我到目前为止所做的,但我不知道如何继续。请帮助!

function Yatzi(np)

if nargin == 0
    np=1;
elseif ~(np>0 && real(np) && numel(np)==1)
    error('Invalid input for number of players.')
end


% set up initial points array
points = ones(13,np)*NaN;
% roll variable
roll = zeros(1,5);

    % initialize our rerolls variable
    rerolls = 1:5;


    for t = 1:3
        % throw the dice
        roll(rerolls) = randi(6,[1 length(rerolls)]);
    end
end

1 个答案:

答案 0 :(得分:0)

首先,您可以使用大小为5 x np的矩阵,这样您就可以将所有内容存储在一起。您不必使用for循环:

% throw the dice
roll(rerolls) = randi(6,[5 length(rerolls)]);

然后扫描矩阵的每一列,并为您要查找的每个结果计算一个计数值。最后,您将使用总滚数除以获得概率。

要检查每个结果,您可以拥有多个if条款。为了使其更具可读性,您可以实现一个函数,例如checkForYahzee(result),其结果将是您的滚动列roll(:,i)

每个函数都可以检查不同的东西,例如:

if( result(1) == result(2) &&
 result(2) == result(3) &&
 result(3) == result(4) &&
 result(4) == result(5) )
% yahtzee!
end

你可以找到更聪明的方法来保存比较等等。