【发布时间】:2014-02-20 13:00:06
【问题描述】:
我正在尝试生成随机数 0-49。只要随机数不为 0,我就想在网格中绘制链接。每次我得到一个 0 时,后面跟着另外十个 0(给或取)。在我的研究中,他们说如果我继续创建我的 Random 的新实例,这将是问题,但我没有这样做。我的代码如下:
//Class begins
namespace Mascape
{
public class Game1 : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Wall[, ,] walls = new Wall[2, 15, 10];
int mapWidth=15;
int mapHeight=10;
Random rand = new Random(); //Outside of any methods or loops.
int mapFullness;
//下面是我的Initialize()方法中
//i is horizontal vs. vertical link
//j is the x position of the link
//k is the y position of the link
mapFullness = 50;
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < mapWidth; ++j)
{
for (int k = 0; k < mapHeight; ++k)
{
if (!(rand.Next(50) == 0))
{
walls[i, j, k].active = true; //Links are drawn if active
}
}
}
}
我正在尝试绘制一个带有随机缺失链接的网格。目标是让它们散开,出现大约 50 分之一。这是实际结果:
知道为什么缺少随机性吗?如果您想了解更多信息,请告诉我。
【问题讨论】:
-
为什么投反对票?我以为我在这个问题上很清楚。我也做过研究。请让我知道,以免我重蹈覆辙。
-
减法随机数生成器算法用于生成随机数。因此,即使可以预测使用相同种子生成的下一个数字,您的数字也会均匀分布。嗯,我可以想为什么每次你得到一个 0,后面跟着另一个 0。紧邻创建的 System.Random 实例会产生相同的随机数序列,因此请注意我们在循环中创建的实例。但是我在您发布的代码中没有看到任何实例创建循环。这是多线程的吗?
-
@GeorgePhilip 我没有对线程做任何事情,但我使用的是 MonoGame 模板 (OpenGL)
-
这个问题不需要反对。
-
Random绝对正确地完成了它的工作。如果我是你,我会测试代码的其他部分以确保它们也能正常工作。也许制作一个预定义的数字 0-49 数组,例如int[] predefArray = new int[50] { 0, 1, 2, ... , 49 },然后从该数组中获取值,而不是调用Random。比如for (int k = 0; k < mapHeight; ++k) if (predefArray[k] != 0) walls[i, j, k].active = true;。之后,检查你的图片,确保只有k为 0 的部分是你没有墙的地方。
标签: c# random grid graphics2d