我正在开发一个空间入侵者游戏,我是这个游戏编程的新手。
我需要入侵者从左向右移动。
我有4排画框,每排有10个入侵者。
我遇到的问题是,只有1行在移动。
请帮帮忙!
谢谢
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;
}
//移动入侵者
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;
}
}
}
}
}
}
发布于 2011-11-26 14:51:56
for(int r = 0; r <= invaderrow-1; r++)
{
for( int c = 0; c<=invadercol-1; c++)
{
objsp.invader[c] = new PictureBox();
objsp.invader[c].Image= pictureBox2.Image;
objsp.invader[c].Image = Resized(pictureBox2.Image, 2);
objsp.invader[c].BackColor = Color.Transparent;
objsp.invader[c].Location= new Point((c * 100) + 10, 10 + r * 50);
this.Controls.Add(objsp.invader[c]);
}
}
在这里,您将创建入侵者行次数分别为4和10的入侵者,但只存储在一个invadercol大小的数组中,因此外层for循环的每一次迭代都将覆盖上一次迭代的结果。因此,您将不会有对以前的引用,只有新的引用,这就是为什么移动方法只移动那些您有引用的。您应该使用二维阵列 (objsp.invader[r,c]
(根据kendfrey的注释进行更正)或类似的东西。
然后,在move方法中确保移动所有PictureBox实例。
https://stackoverflow.com/questions/8279165
复制相似问题