如何从左到右移动入侵者

时间:2011-11-26 14:41:00

标签: c# windows

我正在开发一个太空入侵者游戏,我是这个游戏编程的新手。

我需要入侵者从左向右移动。

我有4行图片盒,每行10个入侵者。

我遇到的问题是只有一行正在移动。

请帮忙!

谢谢

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;
                        }
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

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]);
        }
    }

这里你创建了入侵者时间invadercol计数入侵者,我分别假设4和10,但只存储在invadercol大小的数组中,因此外部for循环的每次迭代都将覆盖前一次迭代的结果。所以你不会有前面的参考,只有新的参考,这就是移动方法只移动你有参考的那些。 您应该使用2-dimension arrayobjsp.invader[r,c] (根据kendfrey的评论更正))或类似的东西。

然后在你的移动方法中确保移动所有PictureBox实例。

相关问题