C# 掷骰子模拟器中的随机类和if语句?

C# 掷骰子模拟器中的随机类和if语句?,c#,random,logic,dice,C#,Random,Logic,Dice,我是C#的初学者,我有一个家庭作业,我必须写一个掷骰子模拟器 用户最多可以选择5个模具,然后当他们滚动每个模具时,总和与之前滚动的模具相加。最后给出了转鼓数和总转鼓数 但是,如果用户滚动6,则此结果不会添加到总和中,但模具会再滚动两次,然后再添加总和 我有几点被卡住了,我想知道一个更好的写作方法。我在下面包含了一个片段 下面我已经说明了每次掷骰子时我的随机类,但是我是否可以只做一次,然后在我的代码中使用它 有没有一个简单的方法来写一部分,如果你掷6,会发生什么?我的意思是,我想我可以在每次骰子滚

我是C#的初学者,我有一个家庭作业,我必须写一个掷骰子模拟器

用户最多可以选择5个模具,然后当他们滚动每个模具时,总和与之前滚动的模具相加。最后给出了转鼓数和总转鼓数

但是,如果用户滚动6,则此结果不会添加到总和中,但模具会再滚动两次,然后再添加总和

我有几点被卡住了,我想知道一个更好的写作方法。我在下面包含了一个片段

  • 下面我已经说明了每次掷骰子时我的随机类,但是我是否可以只做一次,然后在我的代码中使用它

  • 有没有一个简单的方法来写一部分,如果你掷6,会发生什么?我的意思是,我想我可以在每次骰子滚动时写另一个if语句,但这似乎会很长

  • if(intnumberofdie==1)
    {
    随机rnd1=新随机();
    int dice1=rnd1.Next(1,7);
    Console.WriteLine(“您已滚动”+骰子1);
    否则如果(intnumberofdie==2)
    {
    随机rnd1=新随机();
    int dice1=rnd1.Next(1,7);
    控制台写入线(“第一个骰子滚动”+骰子1);
    Console.ReadKey();
    随机rnd2=新随机();
    int dice2=rnd2.Next(1,7);
    WriteLine(“第二个骰子已经滚动了”+(骰子2));
    Console.ReadKey();
    Console.WriteLine(“到目前为止的总和是”+(dice1+dice2));
    }
    
    既然你是初学者,我将试着先解释一些事情。 如果你有很多次不得不做同样的事情,你不应该自己处理每一件事情。这意味着你不应该使用If-else-If-else..而是使用类似for或while的循环

    我已经写了一个简短的函数,它应该做你想要的

    private int GetNumber(int amountDie) {
        if (amountDie <= 0 || amountDie > 5) return 0;
    
        int total = 0;
    
        for (int i = 0; i < amountDie; i++)
        {
            int roll = rnd.Next(1, 7);
    
            if (roll == 6)
            {
                int specialRoll1 = rnd.Next(1, 7);
                int specialRoll2 = rnd.Next(1, 7);
    
                total += specialRoll1;
                total += specialRoll2;
            }
            else {
                total += roll;
            }
        }
    
        return total;
    }
    
    private int GetNumber(int amountDie){
    if(amountDie 5)返回0;
    int-total=0;
    对于(int i=0;i
    现在再解释一下: 因为您说过不能有超过5个骰子,所以我们将首先检查给定的值是否有效,否则我们将只返回0(在这种情况下,有更好的方法可以做,但为了简单起见,我们只说它们返回0)。
    在此之后,我们将声明一个总数,以跟踪我们必须返回的点数。
    然后我们开始循环。对于每个骰子,我们滚动一次(For构造的第一行)。 因为我们需要检查用户是否滚动了6,所以我们有这个if-there。在它里面我们滚动了两个骰子,并将两个结果添加到总数中。请注意,对于这两个滚动,6与任何其他数字一样,处理方式也不一样(如果您需要的话,它会有点复杂)。
    如果用户没有掷6,我们只需将他们掷的东西加到总数中

    在我们为所有死亡做了这些之后,我们只需返回我们得到的总数

    您将看到,如果您只是复制粘贴此代码,它将不会编译。原因是您缺少一个随机对象。在您的代码中,您每次滚动时都会创建一个新对象。这是一个问题,因为随机类不像您想象的那样随机,您应该始终为多个随机数创建一个。
    这就是为什么我在班上加了这个:
    private static readonly Random rnd=new Random();

    这个随机对象只创建一次,然后用于每个骰子。这给了你更多的随机性,并防止每个用户总是滚动相同的值

    我希望这将向您展示如何创建这样的方法。当然,您可以像在代码中那样添加控制台输出等。

    尝试一下:

    var rnd1 = new Random();
    var rollsRemaining = 6;
    var sum = 0;
    while (rollsRemaining > 0)
    {
        int dice1 = rnd1.Next(1, 7);
        Console.WriteLine("You have rolled " + dice1);
        if (dice1 == 6)
        {
            rollsRemaining += 2;    
        }
        else
        {
            sum += dice1;
            rollsRemaining -= 1;
        }
    }
    Console.WriteLine("The sum is " + sum);
    

    比我的版本好得多。但是如果他们得了6分,这将导致两个额外的卷也能有不同的结果。也许这就是op想要的,但从他谈论ifs的方式来看,我不这么认为。@Joelius-我使用op的描述,听起来像是6’s永远不会得到总结,并且总是给出两个新卷。