我需要你的帮助以下程序。我需要创建一个永远完全包含在表单中的失控按钮,并且应尽可能靠近鼠标指针,而不必单击。
我的计划:
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);
}
}
所以,问题是在我的程序中,按钮的位置是随机生成的,并没有尽可能接近鼠标指针。
请帮忙。谢谢。
答案 0 :(得分:1)
您现有的代码生成一组随机坐标并继续这样做,直到这些坐标确保新按钮位置不包含当前指针位置。但你不想要一个随机的位置;你想要一个接近当前指针的位置。
一起删除随机数生成器。而是更改button1_MouseEnter方法,将按钮向上移动到按钮的高度,向左移动按钮的宽度。这样做,直到你碰到一个边缘,然后翻转一下,让它根据被击中的窗口边缘向下/向右运行。
这将使您的按钮跟踪鼠标指针。如果您希望它跟踪密切,您需要添加一些逻辑来检测鼠标输入按钮的位置。如果它从顶部进入,则向下移动几个像素。如果从左侧进入,则向右移动。等等。如果你碰到一个窗口边缘,为它的移动添加一个额外的方向。
由于这是一项学校作业,我会将该逻辑转换为代码,作为提问者的练习。