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