/// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                    frame_act = skeletonFrame.FrameNumber; // Capturamos el número de frame en el que estamos
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                dc.DrawRectangle(Brushes.White, null, new Rect(0, 0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        //RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            /****************************** IMPLEMENTACION DEL JUEGO *********************/
                            Point manoDer = new Point();
                            manoDer = SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position);

                            if (etapa == 0)
                            {
                                menu.Visibility       = System.Windows.Visibility.Visible;
                                Inicial1_1.Visibility = System.Windows.Visibility.Visible;
                                Inicial1_2.Visibility = System.Windows.Visibility.Visible;
                                Inicial2_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial2_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_3.Visibility = System.Windows.Visibility.Hidden;
                                anterior.Visibility   = System.Windows.Visibility.Hidden;
                                siguiente.Visibility  = System.Windows.Visibility.Visible;
                                ayuda.Visibility      = System.Windows.Visibility.Hidden;
                                siguiente.Content     = "SIGUIENTE";
                                puntuacionDos.Content = "0";
                                puntuacionUno.Content = "0";
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(375, 295, 150, 40));

                                // Boton Siguiente

                                if (tocaBoton(manoDer, bot_siguiente, new Point(150, 40))) // Toca el boton 'siguiente'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(375, 295, 150, 40));
                                    if (contando_sig == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_sig = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 45) <= (frame_act)) // Hemos presionado el boton 'siguiente'
                                        {
                                            etapa       += 1;
                                            contando_sig = false;
                                            id_jug_bot   = -1;
                                        }
                                    }
                                }


                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_sig)
                                    {
                                        contando_sig = true;
                                    }
                                    else
                                    {
                                        contando_sig = false;
                                        id_jug_bot   = -1;
                                    }
                                }
                            }

                            if (etapa == 1)
                            {
                                Inicial1_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial1_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial2_1.Visibility = System.Windows.Visibility.Visible;
                                Inicial2_2.Visibility = System.Windows.Visibility.Visible;
                                Inicial3_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_3.Visibility = System.Windows.Visibility.Hidden;
                                anterior.Visibility   = System.Windows.Visibility.Visible;
                                siguiente.Visibility  = System.Windows.Visibility.Visible;
                                siguiente.Content     = "SIGUIENTE";
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(115, 295, 150, 40));
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(375, 295, 150, 40));

                                // Boton Siguiente

                                if (tocaBoton(manoDer, bot_siguiente, new Point(150, 40))) // Toca el boton 'siguiente'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(375, 295, 150, 40));
                                    if (contando_sig == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_sig = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 45) <= (frame_act)) // Hemos presionado el boton 'siguiente'
                                        {
                                            id_jug_bot   = -1;
                                            etapa       += 1;
                                            contando_sig = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_sig)
                                    {
                                        contando_sig = true;
                                    }
                                    else
                                    {
                                        contando_sig = false;
                                        id_jug_bot   = -1;
                                    }
                                }

                                // Boton Anterior

                                if (tocaBoton(manoDer, bot_anterior, new Point(150, 40))) // Toca el boton 'siguiente'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(115, 295, 150, 40));
                                    if (contando_ant == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_ant = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 45) <= (frame_act)) // Hemos presionado el boton 'anterior'
                                        {
                                            id_jug_bot   = -1;
                                            etapa       -= 1;
                                            contando_ant = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_ant)
                                    {
                                        contando_sig = true;
                                    }
                                    else
                                    {
                                        id_jug_bot   = -1;
                                        contando_ant = false;
                                    }
                                }
                            }

                            if (etapa == 2)
                            {
                                Inicial1_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial1_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial2_1.Visibility = System.Windows.Visibility.Hidden;
                                Inicial2_2.Visibility = System.Windows.Visibility.Hidden;
                                Inicial3_1.Visibility = System.Windows.Visibility.Visible;
                                Inicial3_2.Visibility = System.Windows.Visibility.Visible;
                                Inicial3_3.Visibility = System.Windows.Visibility.Visible;
                                anterior.Visibility   = System.Windows.Visibility.Visible;
                                siguiente.Visibility  = System.Windows.Visibility.Visible;
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(115, 295, 150, 40));
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(375, 295, 150, 40));
                                siguiente.Content = "EMPEZAR";

                                // Boton Siguiente

                                if (tocaBoton(manoDer, bot_siguiente, new Point(150, 40))) // Toca el boton 'siguiente'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(375, 295, 150, 40));
                                    if (contando_sig == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_sig = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 45) <= (frame_act)) // Hemos presionado el boton 'siguiente'
                                        {
                                            id_jug_bot   = -1;
                                            etapa       += 1;
                                            contando_sig = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_sig)
                                    {
                                        contando_sig = true;
                                    }
                                    else
                                    {
                                        contando_sig = false;
                                        id_jug_bot   = -1;
                                    }
                                }

                                // Boton Anterior

                                if (tocaBoton(manoDer, bot_anterior, new Point(150, 40))) // Toca el boton 'siguiente'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(115, 295, 150, 40));
                                    if (contando_ant == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_ant = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 45) <= (frame_act)) // Hemos presionado el boton 'anterior'
                                        {
                                            id_jug_bot   = -1;
                                            etapa       -= 1;
                                            contando_ant = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_ant)
                                    {
                                        contando_sig = true;
                                    }
                                    else
                                    {
                                        id_jug_bot   = -1;
                                        contando_ant = false;
                                    }
                                }
                            }
                            if (etapa == 3)
                            {
                                menu.Visibility          = System.Windows.Visibility.Hidden;
                                Inicial1_1.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial1_2.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial2_1.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial2_2.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial3_1.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial3_2.Visibility    = System.Windows.Visibility.Hidden;
                                Inicial3_3.Visibility    = System.Windows.Visibility.Hidden;
                                anterior.Visibility      = System.Windows.Visibility.Hidden;
                                siguiente.Visibility     = System.Windows.Visibility.Hidden;
                                puntuacionUno.Visibility = System.Windows.Visibility.Visible;
                                puntuacionDos.Visibility = System.Windows.Visibility.Visible;

                                pausa1.Visibility    = System.Windows.Visibility.Visible;
                                pausa2.Visibility    = System.Windows.Visibility.Visible;
                                reiniciar.Visibility = System.Windows.Visibility.Visible;
                                ayuda.Visibility     = System.Windows.Visibility.Visible;


                                // Dibujar el fondo negro
                                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));
                                // Fondo blanco fuera de la zona de juego
                                dc.DrawRectangle(Brushes.White, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight / 6.0));
                                dc.DrawRectangle(Brushes.White, null, new Rect(0.0, RenderHeight - RenderHeight / 6.0, RenderWidth, RenderHeight / 6.0));

                                // Dibujamos un marco para diferenciar la pantalla
                                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, 2));
                                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, 2, RenderHeight));
                                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, RenderHeight - 2, RenderWidth, 2));
                                dc.DrawRectangle(Brushes.Black, null, new Rect(RenderWidth - 2, 0.0, 2, RenderHeight));

                                // Linea discontinua central
                                float ini = RenderHeight / 6, tam_ = 4;
                                while ((ini + tam_) <= RenderHeight - (RenderHeight / 6))
                                {
                                    dc.DrawRectangle(Brushes.White, null, new Rect((RenderWidth / 2) - (tam_ / 2), ini, tam_, tam_));
                                    ini += 2 * tam_;
                                }

                                // Pausa jugador 1
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(bot_pausa1.X, bot_pausa1.Y, 90, 30));
                                // Pausa jugador 2
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(bot_pausa2.X, bot_pausa2.Y, 90, 30));
                                // Reiniciar
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(bot_reiniciar.X, bot_reiniciar.Y, 110, 30));

                                // Ayuda
                                dc.DrawRectangle(Brushes.LightGreen, null, new Rect(bot_ayuda.X, bot_ayuda.Y, 40, 30));


                                // Identificacion del Skeleton
                                // El jugador que se encuentre en la mitad derecha controla esa pala y viceversa

                                if (SkeletonPointToScreen(skel.Joints[JointType.Head].Position).X < (RenderWidth / 2))
                                {
                                    skeleton_id = 1;
                                }
                                else
                                {
                                    skeleton_id = 2;
                                }

                                if (skeleton_id == 1) // Actualizamos la posicion del jugador 1
                                {
                                    pala1.CambiarPos(SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position).Y);
                                }

                                if (skeleton_id == 2) // Actualizamos la posicion del jugador 2
                                {
                                    pala2.CambiarPos(SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position).Y);
                                }

                                // Comprobamos si choca arriba o abajo
                                ChoquePared(ball);

                                // Comprobamos si choca con alguna de las palas de juego
                                ColisionPelota(ball, pala1, pala2);

                                // Comprobamos si algun jugador ha marcado
                                int marcado = PuntoMarcado(ball, pala1, pala2);

                                if (marcado > 0)
                                {
                                    // Actualizamos la puntuacion
                                    if (marcado == 1)
                                    {
                                        jugador1.Marcar();
                                        puntuacionUno.Content = jugador1.GetPuntuacion().ToString();
                                    }

                                    if (marcado == 2)
                                    {
                                        jugador2.Marcar();
                                        puntuacionDos.Content = jugador2.GetPuntuacion().ToString();
                                    }

                                    ball = new Pelota(new Point(RenderHeight / 2, RenderWidth / 2), ball.GetTam());
                                }

                                // Dibujamos las palas de juego
                                pala1.Dibujar(dc);
                                pala2.Dibujar(dc);


                                // Actualizamos la posicion de la pelota
                                ball.ActualizarPos();
                                ball.Dibujar(dc); // La dibujamos


                                // Funcionalidad de los botones
                                // Boton de pausa del jugador 1
                                if (tocaBoton(manoDer, bot_pausa1, new Point(90, 30))) // Toca el boton 'Pausar'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(bot_pausa1.X, bot_pausa1.Y, 90, 30));
                                    if (contando_pau1 == false)
                                    {
                                        id_jug_bot    = skel.TrackingId;
                                        contando_pau1 = true;
                                        frame_ini     = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 40) <= (frame_act)) // Hemos presionado el boton 'Pausar'
                                        {
                                            id_jug_bot = -1;
                                            if (pausa == true)
                                            {
                                                ball.ActualizarVel(velx, vely);
                                                pausa = false;
                                            }
                                            else
                                            {
                                                ball.ActualizarVel(0.0, 0.0);
                                                velx  = ball.GetVel().X;
                                                vely  = ball.GetVel().Y;
                                                pausa = true;
                                            }
                                            contando_pau1 = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_pau1)
                                    {
                                        contando_pau1 = true;
                                    }
                                    else
                                    {
                                        id_jug_bot    = -1;
                                        contando_pau1 = false;
                                    }
                                }

                                // Boton de pausa del jugador 2
                                if (tocaBoton(manoDer, bot_pausa2, new Point(90, 30))) // Toca el boton 'Pausar'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(bot_pausa2.X, bot_pausa2.Y, 90, 30));
                                    if (contando_pau2 == false)
                                    {
                                        id_jug_bot    = skel.TrackingId;
                                        contando_pau2 = true;
                                        frame_ini     = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 40) <= (frame_act)) // Hemos presionado el boton 'Pausar'
                                        {
                                            id_jug_bot = -1;
                                            if (pausa == true)
                                            {
                                                ball.ActualizarVel(velx, velx);
                                                pausa = false;
                                            }
                                            else
                                            {
                                                ball.ActualizarVel(0.0, 0.0);
                                                velx  = ball.GetVel().X;
                                                vely  = ball.GetVel().Y;
                                                pausa = true;
                                            }
                                            contando_pau2 = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_pau2)
                                    {
                                        contando_pau2 = true;
                                    }
                                    else
                                    {
                                        id_jug_bot    = -1;
                                        contando_pau2 = false;
                                    }
                                }

                                // Boton de reinicio
                                if (tocaBoton(manoDer, bot_reiniciar, new Point(110, 30))) // Toca el boton 'Reiniciar'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(bot_reiniciar.X, bot_reiniciar.Y, 110, 30));
                                    if (contando_rei == false)
                                    {
                                        id_jug_bot   = skel.TrackingId;
                                        contando_rei = true;
                                        frame_ini    = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 60) <= (frame_act)) // Hemos presionado el boton 'Reiniciar'
                                        {
                                            id_jug_bot            = -1;
                                            jugador1              = new Jugador();
                                            jugador2              = new Jugador();
                                            puntuacionUno.Content = jugador1.GetPuntuacion().ToString();
                                            puntuacionDos.Content = jugador2.GetPuntuacion().ToString();
                                            ball         = new Pelota(new Point(RenderHeight / 2, RenderWidth / 2), ball.GetTam());
                                            contando_rei = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_rei)
                                    {
                                        contando_rei = true;
                                    }
                                    else
                                    {
                                        id_jug_bot   = -1;
                                        contando_rei = false;
                                    }
                                }

                                // Boton de ayuda
                                if (tocaBoton(manoDer, bot_ayuda, new Point(40, 30))) // Toca el boton 'Ayuda'
                                {
                                    dc.DrawRectangle(Brushes.Green, null, new Rect(bot_ayuda.X, bot_ayuda.Y, 40, 30));
                                    if (contando_ayu == false)
                                    {
                                        id_jug_bot        = skel.TrackingId;
                                        contando_ayu      = true;
                                        volver.Visibility = System.Windows.Visibility.Visible;
                                        frame_ini         = frame_act;
                                    }
                                    else
                                    {
                                        if ((frame_ini + 30) <= (frame_act)) // Hemos presionado el boton 'Ayuda'
                                        {
                                            id_jug_bot            = -1;
                                            jugador1              = new Jugador();
                                            jugador2              = new Jugador();
                                            puntuacionUno.Content = jugador1.GetPuntuacion().ToString();
                                            puntuacionDos.Content = jugador2.GetPuntuacion().ToString();
                                            ball = new Pelota(new Point(RenderWidth / 2, RenderHeight / 2), ball.GetTam());
                                            volver.Visibility = System.Windows.Visibility.Hidden;
                                            etapa             = 0;
                                            contando_ayu      = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if ((id_jug_bot != skel.TrackingId) && contando_ayu)
                                    {
                                        contando_ayu = true;
                                    }
                                    else
                                    {
                                        id_jug_bot        = -1;
                                        contando_ayu      = false;
                                        volver.Visibility = System.Windows.Visibility.Hidden;
                                    }
                                }
                            }

                            // Dibujamos la mano por encima de todo lo demas
                            dc.DrawEllipse(Brushes.Black, null, SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position), 10, 10);
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(Brushes.Black, null, SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position), 10, 10);
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }