创建一个骰子,如果骰子落在C#中的特定数字上,它会翻倍并继续滚动?

时间:2019-05-12 16:47:20

标签: c# recursion dice rolling-computation

我正在尝试制作一个我相信必须使用递归的程序。简而言之:创建一个将掷骰子的程序。如果它落在6上,则将创建并滚动两个骰子,依此类推,直到不再滚动6个。

问题不是创建一个新的或真正的随机对象,而是递归的骰子。

递归方法如下:

    public static int Recursion(int a)
    {
        Random m = new Random();

        if (a < 6)
        {
            return a;
        }

        else
        {
            a = m.Next(1, 7);
            return Recursion(a) * 2;
        }
    }

2 个答案:

答案 0 :(得分:1)

可能是这样吗?

public static int Roll() {
   return Roll(new Random(), 1);
}

public static int Roll(Random random, int diceCount) {
    int sum = 0;
    for (int dice = 1; dice <= diceCount; ++dice) {
        int rolled = random.Next(1, 7);
        if (rolled == 6) {
            sum += Roll(random, 2)
        }
        else
        {
            sum += rolled;
        }

    }

    return sum;
}

所以,首先我掷一个骰子。如果不是6,那么我接受它的值作为结果。如果是六个,那么我去掉那个骰子/骰子,并用另外两个我滚动。然后,对于每个新骰子,我都遵循相同的规则,直到表上所有骰子都滚动且它们都不是6。现在,我将所有骰子的值求和。这就是该递归算法的作用。请注意,尽管机会无限低,但是您可以一直玩到下一次,因为总有掷6的机会,因此您可能只能掷6直到死。

答案 1 :(得分:0)

您可以通过创建一个骰子对象使其更面向对象:

using System;
using System.Collections.Generic;

class Dices
{
    public class Dice
    {
        private static Random roler = new Random();
        private int roledNumber;
        public int Role()
        {
            roledNumber = roler.Next(6) + 1 ;
            return roledNumber;
        }

        public int Number
        {
            get { return roledNumber; }
        }
    }

    static void Main(string[] args)
    {
        List<Dice> allDices = new List<Dice>();

        Dice firstDice = new Dice();
        allDices.Add(firstDice);

        if (firstDice.Role() == 6) createDices(allDices);
    }

    static void createDices(List<Dice> dices)
    {
        Dice first = new Dice();
        dices.Add(first);
        if (first.Role() == 6) createDices(dices);
        Dice second = new Dice();
        dices.Add(second);
        if (second.Role() == 6) createDices(dices);

    }
}