我在C#中创建了一个简单的游戏(Yatzee)。我创建了一个包含5个不同骰子的数组
int[] dice = new int[5];
现在,我想创建一个抛出这五个骰子之一的方法。哪个应该抛出的模具应该作为该方法中的参数传递。所以这就是我尝试的方式:
public void throwDice(int x)
{
Random r1 = new Random(6);
r1.x;
}
我相信正在发生的事情是,该方法接受一个参数x
,随机应该将骰子扔到1-6之间的数字。但是当我写下这句话时,我会收到错误:r1.x
;
那么,为什么我在这里问,是否能得到一些指导。我在这里走在正确的轨道上,还是我完全迷失了?
答案 0 :(得分:5)
您使用的Random
对象错误。构造函数参数是种子。您需要r1.Next(6)+1
。
有关详细信息,请参阅相关帖子:How do I generate a random int number in C#?。
您可能想要做的是:
Random rnd = new Random();
int[] dice = new int[5];
void ThrowDie(int x)
{
dice[x] = rnd.Next(6)+1;
}
答案 1 :(得分:1)
r1
是Random
类的实例。 x
是throwDice
方法的参数。
这并不意味着您的r1
必须有一个名为x
的字段。
我认为你正在寻找类似的东西;
Random r1 = new Random();
public int throwDice()
{
return r1.Next(1, 6);
}
Rememer,在Random.Next
方法中,lowerbound是包含的,但是upperbound是独占的。
答案 2 :(得分:0)
以下是解决此问题的另一种方法:
public class RandomDice
{
private const int NUMBER_OF_DICE = 5;
private const int MAX_DICE_VALUE = 6;
private static readonly Random Rng = new Random();
public List<int> NumberList = new List<int>();
private static IEnumerable<int> GetRandomNumbers()
{
while (true)
yield return Rng.Next(1, MAX_DICE_VALUE + 1);
}
internal void AddDice()
{
NumberList.Clear();
NumberList.AddRange(GetRandomNumbers().Take(NUMBER_OF_DICE).ToList());
}
}