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); } }
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!"); } } }