-1

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
4

1 回答 1

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

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

于 2012-11-21T16:25:45.577 回答