Playing Yahtzee on Matlab?



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

  • 显示数字 1、2、3、4 和 5 的 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
首先,

你可以有一个大小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

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

最新更新