C# - 失控按钮

时间:2015-10-07 19:35:17

标签: c# winforms

我需要你的帮助以下程序。我需要创建一个永远完全包含在表单中的失控按钮,并且应尽可能靠近鼠标指针,而不必单击。

我的计划:

public partial class Form1 : Form
{
    int i = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        successLabel.Visible = true;
        button1.Enabled = false;
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        if (successLabel.Visible == false) missedLabel.Visible = true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        successLabel.Visible = missedLabel.Visible = false;
        timer1.Enabled = true;
        progressBar1.Value = progressBar1.Minimum;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Interval = 1000;
        if (progressBar1.Value == progressBar1.Maximum)
        {
            gameOverLabel.Visible = true;
            this.Enabled = false;
            timer1.Enabled = false;
            Form1_MouseClick(sender, e);
        }
        else
        {
            gameOverLabel.Visible = false;
            progressBar1.PerformStep();
        }
    }

    private void Form1_MouseClick(object sender, EventArgs e)
    {
        i++;
        gameOverLabel.Text = "Game over, you failed! " + Environment.NewLine + "Clicks: " + i.ToString();
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        missedLabel.Visible = false;
        int x, y;
        Point formClientSize = new Point(ClientSize);

        Random rnd = new Random();
        do
        {
            x = rnd.Next(0, formClientSize.X - button1.Width);
        }
        while (x >= button1.Left - button1.Width && x <= button1.Right);
        do
        {
            y = rnd.Next(0, formClientSize.Y - button1.Height);
        }
        while (y >= button1.Top - button1.Height && y <= button1.Bottom);
        button1.Location = new Point(x, y);
    }
}

所以,问题是在我的程序中,按钮的位置是随机生成的,并没有尽可能接近鼠标指针。

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

您现有的代码生成一组随机坐标并继续这样做,直到这些坐标确保新按钮位置不包含当前指针位置。但你不想要一个随机的位置;你想要一个接近当前指针的位置。

一起删除随机数生成器。而是更改button1_MouseEnter方法,将按钮向上移动到按钮的高度,向左移动按钮的宽度。这样做,直到你碰到一个边缘,然后翻转一下,让它根据被击中的窗口边缘向下/向右运行。

这将使您的按钮跟踪鼠标指针。如果您希望它跟踪密切,您需要添加一些逻辑来检测鼠标输入按钮的位置。如果它从顶部进入,则向下移动几个像素。如果从左侧进入,则向右移动。等等。如果你碰到一个窗口边缘,为它的移动添加一个额外的方向。

由于这是一项学校作业,我会将该逻辑转换为代码,作为提问者的练习。

相关问题