private void StartMovement() { if (!collapse.PredictCollapse())//якщо не очікується зіткнення-зробити крок { ghost.MoveGhost(); } else { return; } Direction dir = ghost.currentDirection; MyPoint endAnimPoint = converter.ToCanvasCoordinates(ghost.currentPosition); if (dir == Direction.up) { double duration = Math.Abs(endAnimPoint.Y - currentGhostPosition.Y) / 100.0; Storyboard sb = new Storyboard(); DoubleAnimation anim = new DoubleAnimation(currentGhostPosition.Y, endAnimPoint.Y, TimeSpan.FromSeconds(duration)); Storyboard.SetTarget(anim, ghostImage); Storyboard.SetTargetProperty(anim, new PropertyPath("(Canvas.Top)")); sb.Children.Add(anim); sb.Begin(); currentGhostPosition = endAnimPoint; } else if (dir == Direction.down) { double duration = Math.Abs(endAnimPoint.Y - currentGhostPosition.Y) / 100.0; Storyboard sb = new Storyboard(); DoubleAnimation anim = new DoubleAnimation(currentGhostPosition.Y, endAnimPoint.Y, TimeSpan.FromSeconds(duration)); Storyboard.SetTarget(anim, ghostImage); Storyboard.SetTargetProperty(anim, new PropertyPath("(Canvas.Top)")); sb.Children.Add(anim); sb.Begin(); currentGhostPosition = endAnimPoint; } else if (dir == Direction.left) { double duration = Math.Abs(endAnimPoint.X - currentGhostPosition.X) / 100.0; Storyboard sb = new Storyboard(); DoubleAnimation anim = new DoubleAnimation(currentGhostPosition.X, endAnimPoint.X, TimeSpan.FromSeconds(duration)); Storyboard.SetTarget(anim, ghostImage); Storyboard.SetTargetProperty(anim, new PropertyPath("(Canvas.Left)")); sb.Children.Add(anim); sb.Begin(); currentGhostPosition = endAnimPoint; } else if (dir == Direction.right) { double duration = Math.Abs(endAnimPoint.X - currentGhostPosition.X) / 100.0; Storyboard sb = new Storyboard(); DoubleAnimation anim = new DoubleAnimation(currentGhostPosition.X, endAnimPoint.X, TimeSpan.FromSeconds(duration)); Storyboard.SetTarget(anim, ghostImage); Storyboard.SetTargetProperty(anim, new PropertyPath("(Canvas.Left)")); sb.Children.Add(anim); sb.Begin(); currentGhostPosition = endAnimPoint; } }