use*_*070 3 c# arrays random loops for-loop
这是我第一次发帖.希望这个问题不会太混乱.我正在为一个初学者C#书的实验室工作,现在卡住了.我正在创建一个"狗赛跑模拟器"计划.当我点击"开始比赛"按钮,狗,直到他们到达终点移动到与定时器的每个替权利,在1到30之间的随机整数.我试着开关了代码一吨的不同的方式,阅读阵列,Random类,以及环网上,但出于某种原因,不管是什么,狗总是以同样的速度移动.它们需要以不同的随机速率随每个刻度移动.
解决方案会很好,但我真的想知道,为什么我的代码不起作用?不应该为每只狗分配一个不同的随机数,因为它循环通过数组的'i'值?
图片可以在这里找到:http: //makingspidersense.com/dograce.png
这是Form1代码:
Greyhound[] dogs = new Greyhound[4];
private void startRaceButton_Click(object sender, EventArgs e)
{
timer1.Start();
dogs[0] = new Greyhound() { MyPictureBox = dog1PictureBox };
dogs[1] = new Greyhound() { MyPictureBox = dog2PictureBox };
dogs[2] = new Greyhound() { MyPictureBox = dog3PictureBox };
dogs[3] = new Greyhound() { MyPictureBox = dog4PictureBox };
}
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < 4 ; i++)
{
if (dogs[i] != null)
{
dogs[i].Randomizer = new Random();
dogs[i].Distance = dogs[i].Randomizer.Next(1, 30);
dogs[i].Move();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是Greyhound类代码:
class Greyhound
{
public PictureBox MyPictureBox;
public bool GoingForward = true;
public Random Randomizer;
public int Distance;
public void Move()
{
if (MyPictureBox != null)
{
if (GoingForward == true)
{
MyPictureBox.Left += Distance;
if (MyPictureBox.Left >= MyPictureBox.Parent.Width - MyPictureBox.Width)
{
GoingForward = false;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个常见的问题,您鸵鸟政策创建的新实例Random每次迭代,你叫Next()上同一个实例,这个问题是因为当你创建随机默认种子的新intance基于DateTime.Now
var r = new Random();
for (int i = 0; i < 4 ; i++)
{
if (dogs[i] != null)
{
dogs[i].Randomizer = r;
dogs[i].Distance = r.Next(1, 30);
dogs[i].Move();
}
}
Run Code Online (Sandbox Code Playgroud)