【发布时间】:2015-12-26 10:38:30
【问题描述】:
这是我第一次发帖。希望这个问题不会太令人困惑。我正在为初学者 C# 书做一个实验室,现在卡住了。我正在创建一个“赛狗模拟器”程序。当我单击“开始比赛”按钮时,狗将在计时器的每个滴答声中以 1 到 30 之间的随机整数向右移动,直到它们到达终点。我尝试了很多不同的方式来切换代码,在线阅读数组、随机类和 for 循环,但出于某种原因,无论如何,狗总是以相同的速度移动。它们需要在每个滴答声中以不同的随机速率移动。
一个解决方案会很好,但我真正想知道的是,为什么我的代码不起作用? 在遍历数组的“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();
}
}
}
这是灰狗类代码:
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;
}
}
}
}
}
【问题讨论】:
标签: c# arrays loops for-loop random