需要一些骰子滚动算法的帮助

Nat*_*oob 1 algorithm dice

我将如何对以下方法的算法进行伪编码:

  • 滚动一种模具 - 4,6,8,10或12面

  • 可以卷起这种类型的十个模具

  • 如果超过一半的骰子是1,则打印出一条消息,表明它们已经破坏并结束程序

  • 如果任何模具等于模具的模具类型,则从组中取出最高值.以及重新轧制的模具等于模具轧制类型的价值.

    ^^^^ IE - 让我们说你有3个六面模具,你滚动它们你得到4,2和6.你取6的值,因为它是最高的.然后你重新滚动六个模具.如果你得到6,那么你将六个加到前六个并重新滚动.如果不是,您只需将最高模具添加到之前的值.

Rob*_*ick 6

我认为你的问题指出了你发现这个困难的原因.你试图在一个地方解决太多而且变得势不可挡.您不想创建一个方法来执行此操作.你会想要创建几个.首先将问题分解为组成部分.

注意:我没有以OO的方式接近这个,以使答案更容易解析.我鼓励您更详细地考虑设计.

要求1:滚动一种模具 - 4,6,8,10或12面

好的 - 所以我们需要一些类似的方法:

int Roll(int sides);

基本上Roll只返回1和side(包括)之间的随机值.

要求2:可以卷起这种类型的十个模具

这可能是一个for循环.

要求3:如果超过一半的骰子是1,则打印出一条消息,表明它们已经破坏并结束程序

此要求意味着您将每个调用的结果存储在集合中的Roll中 - 例如,List或int [](整数数组).

接下来它表示您正在迭代该集合并计算"1"的卷数.如果计数大于滚动总数的一半,则结束程序.计数很容易(对于循环或foreach可能是你最好的选择)并且你知道有多少卷(根据集合中的项目数量以及因为你在制作卷时你的for循环有一个计数器..分开比较.

要求4:如果任何模具等于模具的模具类型,请从组中取出最高值.以及重新轧制的模具等于模具轧制类型的价值.

再次 - 您需要迭代结果集并执行操作请求.我不会尝试通过将此规则与之前的规则相结合来"优化"您的解决方案 - 它只会使解决方案无法真正获益.

  • 我将在滚动部分(步骤1)中包括第4步,它被称为开放式收费我角色扮演游戏及其执行此操作的逻辑位置,如果最大,则再次滚动并返回最终总和.如果你想从正常Roll分开,请调用方法RollOpenEnded. (2认同)