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