Witam uczę się C# i napotkałem swoją pierwszą przeszkodę, której nie mogę przejść sam. Mam problem z przypisaniem losowej wartości do każdego obiektu z tablicy. Od razu pokażę kod.
Klasa do tworzenia obiektów, które będą poruszać się po trasie:
public class Greyhound
{
public int StartingPosition = 23;
public int RacetrackLength;
public PictureBox MyPictureBox = null;
public Random MyRandom = new Random();
public bool Run()
{
int Randomizer = MyRandom.Next(1, 10);
MyPictureBox.Left += Randomizer;
if (MyPictureBox.Left >= RacetrackLength - MyPictureBox.Width)
{
return true;
}
else
return false;
}
}
Form1
public partial class Form1 : Form
{
Greyhound[] hounds = new Greyhound[4];
public Form1()
{
InitializeComponent();
}
public void MakeHounds(int index, PictureBox PictureBoxHound)
{
if (hounds[index] == null)
{
hounds[index] = new Greyhound();
hounds[index].MyRandom = new Random();
hounds[index].MyPictureBox = PictureBoxHound;
hounds[index].RacetrackLength = pictureBox1.Width;
timer1.Start();
}
}
private void button1_Click(object sender, EventArgs e)
{
MakeHounds(0, pictureBox2);
MakeHounds(1, pictureBox3);
MakeHounds(2, pictureBox4);
MakeHounds(3, pictureBox5);
}
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
if (hounds[i] != null)
hounds[i].Run();
}
}
}
Problem polega na tym, że wszystkie obiekty poruszają się z tą samą prędkością. Ja rozumiem to tak, że ze każdym razem gdy tworzymy Greyhound każdy z nich otrzymuje nową wartość Randomizer, no ale tak się nie dzieje. Czego nie widzę, co jest nie tak?