i am developing a space invader game, and i am new to this game programming thing.
i need the invaders to move from left to right.
i have 4 rows of pictureboxes,10 invaders per row.
the problem i am having is that only 1 of the rows are moving.
please help!
Thank you
private void Form1_Load(object sender, EventArgs e)
{
Cursor.Dispose();
objsp.gsImage = Image.FromFile(@"C:\Users\kuven\Desktop\SpaceInvader\SpaceInvader\Space Shooter.png");
objsp.gsImage = Resized(objsp.gsImage, 2);
objsp.gsPos = new Point(660, 650);
Cursor.Hide();
Cursor.Position = new Point(660 + objsp.gsImage.Width / 2, 650 + objsp.gsImage.Height / 2);
Cursor.Clip = new Rectangle(this.Location, this.Size);
objsp.invader = new PictureBox[invaderrow,invadercol];
for(int r = 0; r <= invaderrow-1; r++)
{
for( int c = 0; c<=invadercol-1; c++)
{
objsp.invader[r,c] = new PictureBox();
objsp.invader[r,c].Image= pictureBox2.Image;
objsp.invader[r,c].Image = Resized(pictureBox2.Image, 2);
objsp.invader[r,c].BackColor = Color.Transparent;
objsp.invader[r,c].Location= new Point((c * 100) + 10, 10 + r * 50);
this.Controls.Add(objsp.invader[r,c]);
}
}
invadermove.Enabled = true;
}
//moving invaders
private void invadermove_Tick(object sender, EventArgs e)
{
for (int r = 0; r <= invaderrow-1 ; r++)
{
for (int c = 0; c <= invadercol - 1; c++)
{
if (level == 0)
dir = "r";
if (objsp.invader[r,9].Left >= ClientSize.Width)
dir = "l";
if (dir == "r")
{
if (c < 9)
{
objsp.invader[r,c].Location = new Point(objsp.invader[r,c].Left + 10, level * 5 + 25);
}
if (c > 8)
{
objsp.invader[r,c].Location = new Point(objsp.invader[r,c].Left + 10, level * 5 + 61);
if (objsp.invader[r,9].Left >= ClientSize.Width)
{
level += 1;
}
}
}
if (dir == "l")
{
if (c < 9)
{
objsp.invader[r,c].Location = new Point(objsp.invader[r,c].Left - 10, level * 5 + 25);
}
if (c > 8)
{
objsp.invader[r,c].Location = new Point(objsp.invader[r,c].Left - 10, level * 5 + 61);
if (objsp.invader[r,0].Left <=0)
{
dir = "r";
level += 1;
}
}
}
}
}
}
Here you are creating invaderrow times invadercol count invaders, I assume 4 and 10 respectively, but storing only in an invadercol sized array, so each iteration of the outer for loop will override the result of the previous iteration. So you won’t have the references for the previous ones, only the new ones, that’s why the move method only moves those for which you have the reference.
You should use maybe a 2-dimension array (
objsp.invader[r,c](corrected according to kendfrey’s comment)) or something similar.Then in your move method make sure, to move all of the PictureBox instances.