private void moveBalls()
        {
            for (int index = 0; index < balls.Count; index++)
            {
                Collide.wall(balls[index], acc[index], leftBound, 'l');
                Collide.wall(balls[index], acc[index], rightBound, 'r');
                Collide.wall(balls[index], acc[index], topBound, 't');

                double xmov = acc[index][0] * Math.Cos((acc[index][1] * Math.PI) / 180);
                double ymov = acc[index][0] * Math.Sin((acc[index][1] * Math.PI) / 180);
                balls[index].Margin = new Thickness(balls[index].Margin.Left + xmov, 0, 0, balls[index].Margin.Bottom + ymov);
            }
        }
        private void dispatcherTimer_Tick(object sender, object e)
        {
            MovePaddles();
            acceleration[0] = acceleration[0] < 0 ? 0 : acceleration[0];
            acceleration[0] = acceleration[0] > 10 ? 10 : acceleration[0];
            if (paused)
            {
                acceleration[0] = 0;
            }
            EnsurePaddleIsInBounds(BottomPaddle);
            hitBrickCheck();

            if (power != null)
            {
                int rem = -1;
                for (int index = 0; index < power.Count; index++)
                {
                    if (Collide.hit(power[index], poweracc[index], BottomPaddle))
                    {
                        Grid.Children.Remove(power[index]);
                        poweracc.RemoveAt(index);
                        power.RemoveAt(index);
                        powerCount.Add(10);
                        BottomPaddle.Width = BottomPaddle.Width * 1.5;
                    }
                    else if (power[index].Margin.Bottom < paddleTop - 5)
                    {
                        Grid.Children.Remove(power[index]);
                        poweracc.RemoveAt(index);
                        power.RemoveAt(index);
                    }
                    else
                    {
                        double mov = poweracc[index][0] * Math.Sin((poweracc[index][1] * Math.PI) / 180);
                        power[index].Margin = new Thickness(power[index].Margin.Left, 0, 0, power[index].Margin.Bottom + mov);
                    }
                }
                for (int index = 0; index < powerCount.Count; index++)
                {
                    if (powerCount[index] <= 0)
                    {
                        rem = index;
                    }
                }
                if (rem != -1)
                {
                    powerCount.RemoveAt(rem);
                    BottomPaddle.Width = (BottomPaddle.Width * 2) / 3;
                }
            }

            if (count >= options_ballCount && add)
            {
                count = 0;
                addBall(paddleTop + 20, leftBound + 20, getRandomColor());
                acc.Add(new List <int>()
                {
                    5, 40 + random.Next(-10, 10)
                });
            }

            BallFall();
            double bottom = Ball.Margin.Bottom;

            if (bottom < paddleTop - 5)
            {
                timer.Stop();
                ElementSoundPlayer.Play(ElementSoundKind.GoBack);
                Frame.Navigate(typeof(Start), new Passing
                {
                    color = getRandomColor(),
                    text  = "Game Over",
                    size  = 48
                });

                g_ply.Stop(); //end music
            }

            if (bricks.Count == 0)
            {
                timer.Stop();
                ElementSoundPlayer.Play(ElementSoundKind.GoBack);
                Frame.Navigate(typeof(Start), new Passing {
                    color = getRandomColor(),
                    text  = "Game Won",
                    size  = 48
                });
            }

            moveBalls();
            for (int index = 0; index < balls.Count; index++)
            {
                Collide.hit(balls[index], acc[index], BottomPaddle);
            }

            Collide.wall(Ball, acceleration, leftBound, 'l');
            Collide.wall(Ball, acceleration, rightBound, 'r');
            Collide.wall(Ball, acceleration, topBound, 't');

            Collide.hit(Ball, acceleration, BottomPaddle);
            // x left-right: cos y up-down: sin
            // !! remeber, 0 deg is --> NOT NORTH !!
            double xmov = acceleration[0] * Math.Cos((acceleration[1] * Math.PI) / 180);
            double ymov = acceleration[0] * Math.Sin((acceleration[1] * Math.PI) / 180);

            Ball.Margin = new Thickness(Ball.Margin.Left + xmov, 0, 0, Ball.Margin.Bottom + ymov);
        }