C# 随机变量选择相同的值,尽管只有一个实例

C# 随机变量选择相同的值,尽管只有一个实例,c#,random,C#,Random,我正在使用Visual C Winforms应用程序开发一个游戏,该应用程序的导弹来自面板的四个面,速度、伤害和位置随轴值随机变化。初始化变量时使用的所有随机Next函数都使用另一个类中包含的相同随机变量,并用于所有随机用途 然而,对于20枚导弹的阵列,多次为坐标选择相同的值,因此由于图像重叠,只能看到3枚或4枚导弹。速度和侧边变量也会出现这种情况,可能还有损坏变量,但我还没有检查 这些导弹是长方形的,里面有图像。X和Y坐标受包含在GameObject类中的旋转移动值的影响,这意味着我必须除以比

我正在使用Visual C Winforms应用程序开发一个游戏,该应用程序的导弹来自面板的四个面,速度、伤害和位置随轴值随机变化。初始化变量时使用的所有随机Next函数都使用另一个类中包含的相同随机变量,并用于所有随机用途

然而,对于20枚导弹的阵列,多次为坐标选择相同的值,因此由于图像重叠,只能看到3枚或4枚导弹。速度和侧边变量也会出现这种情况,可能还有损坏变量,但我还没有检查

这些导弹是长方形的,里面有图像。X和Y坐标受包含在GameObject类中的旋转移动值的影响,这意味着我必须除以比例值并乘以比例值才能在像素坐标和texal坐标之间切换

下面是一段代码,一旦导弹到达面板侧面而不击中玩家,它就会重新生成导弹

side = game.rand.Next(1, 4);

    switch (side)
    {
            case 1:
                angle = 90;
                x = game.rand.Next((int)(30 / xScale), (int)(990 / xScale));
                y = (int)(30 / yScale);
                break;
            case 2:
                x = (int)(1000 / xScale);
                y = game.rand.Next((int)(30 / yScale), (int)(610 / yScale));
                break;
            case 3:
                angle = 180;
                x = game.rand.Next((int)(30 / xScale), (int)(990 / xScale));
                y = (int)(610 / yScale);
                break;
            case 4:
                angle = -90;
                x = (int)(30 / xScale);
                y = game.rand.Next((int)(30 / yScale), (int)(610 / yScale));
                break;
        }
game.rand是存储在另一个类中的公共随机变量。它应该沿y轴或x轴选择随机变量,但通常只选择2个不同的值,尽管该方法被调用了20次


欢迎提出任何建议。非常感谢您的阅读

您的随机设置不正确。下一步是返回的随机数的唯一上界。返回的值来自minValue,但小于maxValue

那么,你的

 side = game.rand.Next(1, 4);   //creates a number between 1 and 3
要实现您的目标,您应该将其更改为:

side = game.rand.Next(1, 5);   //creates a number between 1 and 4

代码中的一个问题是使用Nextint,int来获取随机值,而您的值不是整数,而是双精度30/xScale

改为使用NextDouble方法:

public double GetRandomNumber(double minimum, double maximum)
{ 
    return game.rand.NextDouble() * (maximum - minimum) + minimum;
}
为您提供一些测试:

 class Freq
        {
            public int one = 0, two = 0, three = 0, four = 0, els = 0;
            public override string ToString()
            {
                return String.Format("Ones: {0} - Twos: {1} - Threes: {2} - Fours: {3} ", one, two, three, four);
            }
        }
        static void RunTest()
        {
            int n;
            for (int i = 0; i < 20; i++)
            {
                n = game.rand.Next(1, 4);
                switch (n)
                {
                    case 1:
                        ++freq.one;
                        break;
                    case 2:
                        ++freq.two;
                        break;
                    case 3:
                        ++freq.three;
                        break;
                    case 4:
                        ++freq.four;
                        break;
                    default:
                        ++freq.els;
                        break;
                }
            }
            Console.WriteLine(freq);
        }


side = game.rand.Next(1, 4);
产生:

1:2-2:6-3:7-4:5

一:6-二:2-三:8-四:4

一:8-二:2-三:7-四:3

一:3-二:1-三:11-四:5

一:4-二:8-三:4-四:4

文档中说MaxValue是独占的,这意味着案例4无效。
side = game.rand.Next(1, 5);