【发布时间】:2010-10-07 18:15:19
【问题描述】:
参考this programming game我目前正在建设中。
当游戏开始时,我在画布上的随机点生成这些机器人,乍一看(同时添加一个或两个机器人),这似乎可以正常工作。
...但是,当我同时添加大量机器人时,它们是如何“随机”出现在画布上的:
alt text http://img22.imageshack.us/img22/6895/randombotpositionlf7.jpg
所谓的随机点似乎并不那么随机......它们只是直线上的点!
这是我计算积分的方式:
SetStartingPoint(GetRandomPoint(ArenaWidth, ArenaHeight)); //the width and height are 550, 480 at the moment
//which calls:
private Point GetRandomPoint(double maxWidth, double maxHeight)
{
return new Point(new Random().Next(0, (int)(maxWidth-80)), new Random().Next(0, (int)maxHeight));
}
//and ultimately:
private void SetStartingPoint(Point p)
{
Translate_Body.X = (double)p.X;
Translate_Body.Y = (double)p.Y;
}
关于上面的代码,Translate_Body 是机器人的TranslateTransform 类型(canvas),因此通过分配它的X 和Y 属性,它将其位置更改为新值
我在这里错过了什么?
[更新]解决方案:
问题就像你们都建议的那样,由于新的实例化,数字没有正确播种。
我现在将代码更改为使用单个 Random 变量并从中播种所有点。
但我仍然无法理解为什么在看似直线的坐标上生成点。 有人能解释一下吗?
【问题讨论】:
-
你能提供更多的上下文吗?什么是 Translate_Body?您的画布的 XAML 是什么样的?
-
我认为这与这种情况无关,但我仍然在我的帖子中添加了解释
-
随机调用总是会产生相同的数字。我可以想象的一种情况是,您使用前一个“机器人”的坐标作为下一个机器人的起点并从那里偏移......