让一个函数循环

1视图(30天)
厄里斯Rusnac
厄里斯Rusnac 2021年4月27日
回答: 杰夫•海斯 2021年4月28日
游戏“快艇”游戏环节的一个函数,二次轧制直到到达5的这是我当前的代码
函数roll_again = yatzhee(结果)
%的矢量为零
numOfEachOutcome = 0 (1,6);
%计算有多少每个数字1 - 6和创建一个向量与结果
i = 1:长度(结果)
numOfEachOutcome(结果(i)) = numOfEachOutcome(结果(i)) + 1;
结束
%分配commonOutcome 1。
commonOutcome = 1;
%找到共同的结果。
i = 6
如果(numOfEachOutcome(我)> numOfEachOutcome (commonOutcome))
commonOutcome =我;
结束
结束
roll_again = [];
i = 1:5
如果((我)~ = commonOutcome结果);
roll_again = (roll_again我);
结束
结束
%这一切给你答案二次轧制
rerollResult =装天花板(randi((1,6), 1,尺寸(roll_again 2)))
i = 1:尺寸(roll_again, 2)
结果(roll_again (i)) = rerollResult(我);
结束
最后= true;
i = 2:5
如果结果(1)(我)~ =结果
最后= false;
结束
结束
如果最后
返回
其他的
结果
结束
结束
目前的结果是
yatzhee ([4 5 4 4 4])
rerollResult =
3
结果=
4 3 4 4 4
ans =
2
俺们是我需要的位置需要二次轧制具名throwAgain,最好是显示
所以在其当前状态函数只卷再一次我需要它滚到5种aceived并显示有多少卷。

答案(1)

杰夫•海斯
杰夫•海斯 2021年4月28日
厄里斯-如果你想继续滚动,直到你有一个Yatzhee,那么你可能想要使用一个 循环。
%设置数到一这将是最初的卷
rollCount = 1;
%可能想添加另一个条件只允许卷的最大数量
%(如游戏)
%,所以我们继续循环直到roll_again数组为空
~ isempty (roll_again)
rerollResult =装天花板(randi((1,6), 1,尺寸(roll_again 2)))
rollCount = rollCount + 1;
%,如果不是所有的常见结果然后再匹配,然后删除
%的和重新开始
如果~ (rerollResult = = commonOutcome)
roll_again (rerollResult = = commonOutcome) = [];
其他的
流(“% d卷才得到Yatzhee ! \ n”,rollCount);
打破;
结束
结束
上面的可以更有效率。你也可以删除一些 循环从你的代码,因为我不认为他们都是必要的(除非需要分配)的一部分。

类别

找到更多的在文字游戏帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的