我是C#的初学者,我有一个家庭作业,必须写骰子模拟器。
用户最多可以选择5个骰子,然后在掷出每个骰子时将总和与之前掷出的骰子相加。最后显示卷数和总数。
但是,如果用户掷出6,则该结果不会添加到总和中,但骰子再掷出两次,然后将总和相加。
我有几点要坚持和/或想知道一种更好的编写方式。我在下面添加了一个代码段。
下面,每次掷骰子时我都会声明我的Random类,但是我可以只执行一次然后在整个代码中使用吗?
是否有一种简单的方法来编写零件,如果您掷6,会发生什么?我的意思是我想我可以在每次骰子滚动时写另一个if语句,但是看起来这会很长吗?
if (intnumberofdie == 1)
{
Random rnd1 = new Random();
int dice1 = rnd1.Next(1, 7);
Console.WriteLine("You have rolled " + dice1);
else if (intnumberofdie == 2)
{
Random rnd1 = new Random();
int dice1 = rnd1.Next(1, 7);
Console.WriteLine("The first die rolled " + dice1);
Console.ReadKey();
Random rnd2 = new Random();
int dice2 = rnd2.Next(1, 7);
Console.WriteLine("The second die has rolled " + (dice2));
Console.ReadKey();
Console.WriteLine("The total sum so far is " + (dice1 + dice2));
}
答案 0 :(得分:1)
一次尝试:
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);
答案 1 :(得分:0)
由于您是初学者,所以我将首先解释一些事情。 如果您有很多次必须做相同的事情,则永远不要自己处理每种情况。这意味着您不应该使用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;
}
现在更多解释:
由于您说的死亡数不能超过5,因此我们将首先检查给定的值是否有效,否则我们将仅返回0(在这种情况下,有更好的方法要做,但是为了简单起见,我们只说他们回来了0)。
之后,我们声明总计以跟踪必须返回的点数。
然后我们开始循环。对于每个骰子,我们滚动一次(for-construct中的第一行)。
由于我们需要检查用户是否掷出了6,所以我们在那里。在其中,我们滚动两个骰子,并将两个结果相加。请注意,对于这两个纸卷6,它就像其他任何数字一样,没有不同的处理方式(如果您需要的话,会更加复杂)。
如果用户未掷出6,则只需将他们掷出的所有东西加到总数中。
完成所有任务后,我们只返回得到的总数。
您将看到,如果仅复制粘贴此代码,它将无法编译。这样做的原因是您缺少随机对象。在您的代码中,每次滚动时总是创建一个新代码。这是一个问题,因为Random类并不是您想像的那么随机,您应该始终为多个随机数创建一个。
这就是为什么我在班级顶部添加此内容的原因:
private static readonly Random rnd = new Random();
此随机对象仅创建一次,然后用于每个骰子。这为您提供了更多的随机性,并防止了每个用户始终滚动相同的值。
我希望这向您展示了如何创建这样的方法。当然,您可以像在代码中一样添加控制台输出等。