在过去的几个月里,我一直在学校开展学校拼图游戏项目。
请回答这一事实,这是一个回答的学校项目,因为我自己学习很重要,但我在这里是因为我真的被卡住了,我真的很感激在右边轻推方向。
目前,程序从指定的文件夹中加载四张图片并将它们随机放在屏幕上。
到目前为止:
该程序希望图片遵循命名约定,即; pic0
至pic3
。
谜题的目标是点击并拖动拼图的四个部分,直到它们匹配。
我已经弄清楚如何用鼠标抓住每一块并拖动它们。
我有一个名为grabbedAll
的数组,它帮助我确保一次只移动一个部分,否则当光标经过每个部分时,它也会移动。
当它们分开时效果很好,但当它们重叠时,两个或多个图片框设置为true,这意味着它们最终都会移动。
我已经看到使用linq的解决方案来检查数组中出现一个dublicate值,但我需要一种方法来检查数组中是否有重复的“true”。
他们的解决方案对我不起作用,因为它是一个bool数组,因此只能是true
或false
。
我目前的代码:
void ImgBox_MouseDown(object sender, EventArgs e)
{
grabbed = true;
//MessageBox.Show("Down");
for (int i = 0; i < antBox; i++)
{
if (MouX >= PicBoxes[i, 0] && MouX <= PicBoxes[i, 0] + Imglinking[i].Width && MouY >= PicBoxes[i, 1] && MouY <= PicBoxes[i, 1] + Imglinking[i].Height)
{
grabbedAll[i] = true;
}
}
label1.Text = "grabbed = " + grabbed;
}
void ImgBox_MouseUp(object sender, EventArgs e)
{
grabbed = false;
for (int i = 0; i < antBox; i++)
{
grabbedAll[i] = false;
}
//MessageBox.Show("Up");
label1.Text = "grabbed = " + grabbed;
}
void ImgBox_MouseMove(object sender, MouseEventArgs e)
{ //start
MouX = System.Windows.Forms.Cursor.Position.X;
MouY = System.Windows.Forms.Cursor.Position.Y;
label2.Text = "X: " + System.Windows.Forms.Cursor.Position.X + "\nY: " + System.Windows.Forms.Cursor.Position.Y;
if (grabbed == true)
{
//e.Button == MouseButtons.Left
for (int i = 0; i < antBox; i++)
{
if (MouX >= PicBoxes[i, 0] && MouX <= PicBoxes[i, 0] + Imglinking[i].Width && MouY >= PicBoxes[i, 1] && MouY <= PicBoxes[i, 1] + Imglinking[i].Height)
{
if (grabbedAll[i] == true)
{
PicBoxes[i, 0] = System.Windows.Forms.Cursor.Position.X - (Imglinking[i].Width / 2);
PicBoxes[i, 1] = System.Windows.Forms.Cursor.Position.Y - (Imglinking[i].Height / 2);
ImgBox[i].Location = new Point(PicBoxes[i, 0], PicBoxes[i, 1]);
}
}
}
}
}