Пример #1
0
 public void img_MouseMove(object sender, MouseEventArgs e)
 {
     if (moving)
     {
         newx = e.GetPosition((IInputElement)(this.img.Parent)).X;
         newy = e.GetPosition((IInputElement)(this.img.Parent)).Y;
         //x -= oldx - newx;
         //y -= oldy - newy;
         ph.Move(new Piece(), oldx - newx, oldy - newy);
         oldx       = newx;
         oldy       = newy;
         img.Margin = new Thickness(x, y, 0, 0);
     }
 }
Пример #2
0
        private void Snap(PieceHolder pHold) //closest only
        {
            bool   snapped = false;
            double xdist;
            double ydist;

            foreach (Piece p in pHold.pieces)
            {
                if (p.j != 0)
                {
                    if (!pHold.pieces.Contains(puzzle[p.i][p.j - 1]))
                    {
                        if (Math.Abs((puzzle[p.i][p.j - 1].X + square / pieces) - p.X) < snapRange && Math.Abs(puzzle[p.i][p.j - 1].Y - p.Y) < snapRange)
                        {
                            xdist = (puzzle[p.i][p.j - 1].X + square / pieces - p.X) * -1;
                            ydist = (puzzle[p.i][p.j - 1].Y - p.Y) * -1;
                            pHold.Move(new Piece(), xdist, ydist);
                            p.ph.Snap(puzzle[p.i][p.j - 1]);
                            snapped = true;
                        }
                    }
                }
                if (p.j != pieces - 1 && !snapped)
                {
                    if (!pHold.pieces.Contains(puzzle[p.i][p.j + 1]))
                    {
                        if (Math.Abs((puzzle[p.i][p.j + 1].X - square / pieces) - p.X) < snapRange && Math.Abs(puzzle[p.i][p.j + 1].Y - p.Y) < snapRange)
                        {
                            xdist = (puzzle[p.i][p.j + 1].X - square / pieces - p.X) * -1;
                            ydist = (puzzle[p.i][p.j + 1].Y - p.Y) * -1;
                            pHold.Move(new Piece(), xdist, ydist);
                            p.ph.Snap(puzzle[p.i][p.j + 1]);
                            snapped = true;
                        }
                    }
                }

                if (p.i != 0 && !snapped)
                {
                    if (!pHold.pieces.Contains(puzzle[p.i - 1][p.j]))
                    {
                        if (Math.Abs(puzzle[p.i - 1][p.j].X - p.X) < snapRange && Math.Abs((puzzle[p.i - 1][p.j].Y + square / pieces) - p.Y) < snapRange)
                        {
                            xdist = (puzzle[p.i - 1][p.j].X - p.X) * -1;
                            ydist = (puzzle[p.i - 1][p.j].Y + square / pieces - p.Y) * -1;
                            pHold.Move(new Piece(), xdist, ydist);
                            p.ph.Snap(puzzle[p.i - 1][p.j]);
                            snapped = true;
                        }
                    }
                }
                if (p.i != pieces - 1 && !snapped)
                {
                    if (!pHold.pieces.Contains(puzzle[p.i + 1][p.j]))
                    {
                        if (Math.Abs(puzzle[p.i + 1][p.j].X - p.X) < snapRange && Math.Abs((puzzle[p.i + 1][p.j].Y - square / pieces) - p.Y) < snapRange)
                        {
                            xdist = (puzzle[p.i + 1][p.j].X - p.X) * -1;
                            ydist = (puzzle[p.i + 1][p.j].Y - square / pieces - p.Y) * -1;
                            pHold.Move(new Piece(), xdist, ydist);
                            p.ph.Snap(puzzle[p.i + 1][p.j]);
                            snapped = true;
                        }
                    }
                }
                if (snapped)
                {
                    break;
                }
            }

            if (snapped)
            {
                snapCount++;
                if (snapCount == (pieces * pieces) - 1)
                {
                    isPlaying = false;
                    snapCount = 0;
                    for (int i = 0; i < pieces; i++)
                    {
                        for (int j = 0; j < pieces; j++)
                        {
                            puzzle[i][j].img.StrokeThickness = 0;
                        }
                    }
                    MessageBox.Show("Puzzle Completed!");
                }
            }
        }