C# 掷骰子的方法,Yatzee游戏

C# 掷骰子的方法,Yatzee游戏,c#,C#,我正在用C#创建一个简单的游戏(Yatzee)。我已经创建了一个可以容纳5个不同骰子的阵列 int[]dice=newint[5] 现在,我想创建一个抛出这五个骰子中的一个的方法。应该抛出的骰子应该作为该方法中的参数传入。我就是这样尝试的: public void throwDice(int x) { Random r1 = new Random(6); r1.x; } 我认为正在发生的事情是,该方法接受了一个参数x,该参数随机地将骰子掷到1-6之间的数字。但是当我写到:r1.

我正在用C#创建一个简单的游戏(Yatzee)。我已经创建了一个可以容纳5个不同骰子的阵列
int[]dice=newint[5]

现在,我想创建一个抛出这五个骰子中的一个的方法。应该抛出的骰子应该作为该方法中的参数传入。我就是这样尝试的:

public void throwDice(int x)
{
    Random r1 = new Random(6);
    r1.x;
}
我认为正在发生的事情是,该方法接受了一个参数
x
,该参数随机地将骰子掷到1-6之间的数字。但是当我写到:
r1.x


所以,我在这里问的是,我是否可以得到一些指导。我是在正确的轨道上,还是完全迷路了?

您使用的
随机对象是错误的。构造函数参数是种子。您需要
r1。下一步(6)+1

有关详细信息,请参阅相关帖子:

您可能想做的是:

Random rnd = new Random();
int[] dice = new int[5];

void ThrowDie(int x)
{
    dice[x] = rnd.Next(6)+1;
}

r1
是类的实例
x
throwDice
方法的一个参数

这并不意味着您的
r1
必须有一个名为
x
的字段

我想你正在寻找类似的东西

Random r1 = new Random();
public int throwDice()
{
  return r1.Next(1, 6);
}

请记住,在方法中,下限是包含的,上限是排除的。

这是解决此问题的另一种方法:

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());
   }
}
公共类随机骰子
{
私有常量整数的个数=5;
私有常量int MAX_DICE_VALUE=6;
私有静态只读随机Rng=new Random();
public List NumberList=新列表();
私有静态IEnumerable GetRandomNumbers()
{
while(true)
下一个收益率返回值(1,最大骰子值+1);
}
内部void AddDice()
{
NumberList.Clear();
NumberList.AddRange(GetRandomNumbers().Take(numberofdice.ToList());
}
}

Random
class上的
x
field/property我从没听说过。你有没有试过编译你的代码?我认为你没有掌握基本知识,而不仅仅是
Random
。阅读下面的链接,无论世界上什么地方有游戏开发作业,它都会给你一个好的开始,所以到处都是关于石头剪刀Tic Tac Toe Yatzee等的低质量问题。我讨厌那些时候:(这就是我要找的!+1而且
Random
实例不应该在方法中。它应该是一个参数或在类级别创建。如果快速重复调用该方法,可能会出现重复问题。@JesseC.Slicer当然,重复使用
Random
实例可以生成相同的值。。