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

标签 c# random

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

但是,对于包含 20 枚导弹的阵列,多次为坐标选择相同的值,因此由于图像重叠,只能看到 3 或 4 枚导弹。这也发生在速度和侧面变量上,并且可能与损坏变量有关,但我还没有检查过。

导弹是矩形,其中包含图像。 X 和 Y 坐标受 Missile 扩展的 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 是存储在另一个类中的公共(public)随机变量。它应该选择沿着 y 轴或穿过 x 轴的随机变量,但通常只选择 2 个不同的值,尽管这个方法被调用了 20 次。

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

最佳答案

您的代码的一个问题是您使用 Next(int, int) 来获取随机值,而您拥有的值不是整数而是双倍 (30/xScale)。

改用 NextDouble 方法:

public double GetRandomNumber(double minimum, double maximum)
{ 
    return game.rand.NextDouble() * (maximum - minimum) + minimum;
}

关于c# - 尽管有一个实例,随机变量选择相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32064687/

相关文章:

c# - Asp 网络核心 : Connection to existing SqlServer

c# - Windows.Storage.KnownFolders.MusicLibrary 路径返回空

c# - 命名空间 'Http' 中不存在类型或命名空间名称 'System.Web'

ruby - 有没有办法在ruby中随机调用特定类的方法?

javascript - 随机数范围的不同概率

function - Lua 5.1.4 math.random 实际上不是随机的

c# - 优化c# excel对文件的读/写

c# - 使用 WebBrowser 和高分辨率显示器的应用程序

random - SAT 解决 : DPLL vs. ?

random - 获得与前一个不同的随机数的惯用方法?