矩形顺时针运动

时间:2015-08-01 22:19:02

标签: c# if-statement while-loop

我试图创建一个Windows窗体应用程序,其中矩形顺时针移动。这是图像。 enter image description here

这是我的代码。

public partial class Form1 : Form
{
    int x;
    int y;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.FillRectangle(Brushes.Crimson, x, y, 20, 20);
    }

    private void movingTimer_Tick(object sender, EventArgs e)
    {
        while (true)
        {
            if (x < 750)
            {
                x += 5;
            }
            else if (x == 750 && y < 340)
            {
                y += 5;
            }
            break;
        }

        Invalidate();
    }
}

我明白为什么我不能走得更远。如果我使用 x - = 5 创建新的if语句,它将与while循环同时激活。 我无法理解的是如何分隔新命令( x - = 5 y - = 5 < / strong>)所以只有在我的第一个while循环结束后才会激活它。

3 个答案:

答案 0 :(得分:2)

好的,我想我明白了。我是这样做的。

while (true)
        {
            if (x < 750 && y == 0)
            {
                x += 5;
            }
            else if (x == 750 && y < 340)
            {
                y += 5;
            }
            else if (x > 0 && y >= 340)
            {
                x -= 5;
            }
            else if (x == 0 && y > 0)
            {
                y -= 5;
            }
            break;
        }

但我觉得有一种更简单优雅的方法可以做到这一点。任何人都可以提出更好的建议吗?

答案 1 :(得分:2)

由于我不知道你想从哪里去,我会为你提供最直观的解决方案:

if (y <= 0 && x < 750)
{
    x += 5;
}
else if (x == 750 && y < 340)
{
    y += 5;
}
else if (y >= 340 && x > 0)
{
    x-=5;
}
else if (y > 0 && x <= 0)
{
    y-=5;
}
break;

你可能需要稍微调整一下这些值,但我想你可以从这里弄明白。

答案 2 :(得分:2)

由于您使用的是计时器,因此不需要while循环,也不要在if语句中检查常量值,因为如果更改表单大小,这些值将不起作用。

使用以下代码:

private void movingTimer_Tick(object sender, EventArgs e)
{
    if (y <= 0 && x < this.ClientSize.Width-20)
    {
        x += 5;
        y = 0;
    }
    if (x >= this.ClientSize.Width - 20 && y< this.ClientSize.Height-20)
    {
        x = this.ClientSize.Width - 20;
        y += 5;
    }
    if(y>= this.ClientSize.Height -20)
    {
        x -= 5;
        y = this.ClientSize.Height - 20;
    }
    if (x <=0 && y >0)
    {
        x = 0;
        y -= 5;
    }

    Invalidate();
}