protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var lastPage = Frame.BackStack.Last().SourcePageType;

            //Frame.BackStack.Clear();
            //GC.Collect();
            //if (e.SourcePageType.FullName.Equals("Pinturillo.CrearSalaPage"))
            if (lastPage.FullName.Contains("CrearSalaPage"))
            {
                if (e.Parameter != null)
                {
                    viewModel.Partida = (clsPartida)e.Parameter;

                    clsJugador jugadorLider = viewModel.Partida.ListadoJugadores.First <clsJugador>(x => x.IsLider);

                    //viewModel.Partida.ListadoJugadores.

                    viewModel.UsuarioPropio             = jugadorLider.Nickname;
                    viewModel.Mensaje.JugadorQueLoEnvia = jugadorLider;
                }
            }
            else
            {
                if (e.Parameter != null)
                {
                    viewModel.UsuarioPropio = (string)e.Parameter;
                }
            }
            base.OnNavigatedTo(e);
        }
        public VMPantallaJuego()
        {
            PuedesFuncionar                = true;
            this.tiempoEspera              = 3;
            _partida                       = new clsPartida();
            _usuarioPropio                 = new clsJugador();
            this._mensaje                  = new clsMensaje();
            _mensaje.JugadorQueLoEnvia     = new clsJugador();
            this.GoBackCommand             = new DelegateCommand(ExecuteGoBackCommand);
            this.SendMessageCommand        = new DelegateCommand(ExecuteSendMessageCommand, CanExecuteSendMessageCommand);
            this.IsUltimaPalabraAcertada   = false;
            _timeMax                       = TIME_MAX;
            this._dispatcherTimer          = new DispatcherTimer();
            this._dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            this._dispatcherTimer.Tick    += Timer_Tik;
            //this._dispatcherTimer.Start();
            this.LblTemporizador  = TIME_MAX.ToString();
            this._palabraAMostrar = "";
            TipoEntradaInkCanvas  = CoreInputDeviceTypes.None;


            SignalR();

            // proxy.Invoke("comenzarPartidaEnGrupo", _partida);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Finaliza una partida.
        /// </summary>
        public void terminarPartida()
        {
            //Obtiene la partida del cliente que llamó al método
            clsPartida partida = partidas.getMatchByConnectionID(Context.ConnectionId);

            //Si el cliente está en una partida
            if (partida != null)
            {
                //Por cada categoria
                for (int i = 0; i < partidas.Lista.Count; i++)
                {
                    //Por cada partida
                    for (int j = 0; j < partidas.Lista[i].Partidas.Count; j++)
                    {
                        //Si encuentra la partida, la borra de la lista
                        if (partidas.Lista[i].Partidas[j].Id == partida.Id)
                        {
                            partidas.Lista[i].Partidas.Remove(partida);
                        }
                    }
                }

                clsJugador jugador1 = partida.Jugador1;
                clsJugador jugador2 = partida.Jugador2;

                //Informa a ambos jugadores de la partida de que la partida ha terminado y envía las estadísticas de esta (preguntas acertadas y falladas de cada jugador)
                Clients.Client(jugador1.ConnectionID).mandarEstadisticasFinalPartida(jugador1.PreguntasAcertadas, jugador1.PreguntasFalladas, jugador2.PreguntasAcertadas, jugador2.PreguntasFalladas);
                Clients.Client(jugador2.ConnectionID).mandarEstadisticasFinalPartida(jugador2.PreguntasAcertadas, jugador2.PreguntasFalladas, jugador1.PreguntasAcertadas, jugador1.PreguntasFalladas);
            }
        }
Exemplo n.º 4
0
        /*
         * public class User
         * {
         *  public string Name { get; set; }
         *
         *  public int Age { get; set; }
         * }*/

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var lastPage = Frame.BackStack.Last().SourcePageType;

            //Frame.BackStack.Clear();
            //if (e.SourcePageType.FullName.Equals("Pinturillo.CrearSalaPage"))
            if (lastPage.FullName.Contains("SalaEspera"))
            {
                if (e.Parameter != null)
                {
                    Tuple <String, clsPartida> partidaConNick = (Tuple <String, clsPartida>)e.Parameter;

                    //viewModel.UsuarioPropio.Nickname = partidaConNick.Item1;
                    viewModel.Partida = partidaConNick.Item2;
                    viewModel.NotifyPropertyChanged("Partida");

                    clsJugador jugadorLider = viewModel.Partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.Nickname == partidaConNick.Item1);

                    //viewModel.Partida.ListadoJugadores.

                    viewModel.UsuarioPropio             = jugadorLider;
                    viewModel.Mensaje.JugadorQueLoEnvia = viewModel.UsuarioPropio;


                    //Este invoke solo lo puede emitir el lider (que si no el servidor recibe 5 llamadas pa lo mismo)
                    //Pero no sé como hacer que solo se invoke una vez ya que aun no está puesto el connectionID del jugador actual en la partida xD
                    //De momento lo he apañao en el servidor poniendo que si es null la partida no haga nada
                }
            }
            proxy.Invoke("yaHeNavegado", viewModel.Partida.NombreSala);

            base.OnNavigatedTo(e);
        }
Exemplo n.º 5
0
        public clsJuegoVM()
        {
            listadoBotones          = new clsListadoBotones().ListadoBotones();
            comandoAbandonarPartida = new DelegateCommand(AbandonarPartidaExecute);
            listaRandom             = new ObservableCollection <clsBoton>();
            objJugador = new clsJugador();


            //Genera un primer sonido
            operacionesListado.GenerarSonidosAleatorios(listaRandom);
            //Al generar un primer sonido, contamos como que se ha generado una repetición (para que corresponda con el índice de la lista)
            repeticiones = 0;

            //Cada segundo suena un sonido de la secuencia
            //Si jugador falla se acaba la partida
            hacerSonidos          = new DispatcherTimer();
            hacerSonidos.Tick    += HacerSonidosIluminarBoton;
            hacerSonidos.Interval = new TimeSpan(0, 0, 1);
            hacerSonidos.Start();


            //Habilita tablero tras reproducir sonidos
            //if (!hacerSonidos.IsEnabled) //Si el temporizador no está en ejecución, habilita el tablero
            //{
            //    tableroHabilitado = true;
            //    NotifyPropertyChanged("TableroHabilitado");
            //}
        }
Exemplo n.º 6
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var lastPage = Frame.BackStack.Last().SourcePageType;

            //Frame.BackStack.Clear();
            //GC.Collect();
            //if (e.SourcePageType.FullName.Equals("PinturilloParaPruebas3.CrearSalaPage"))
            if (lastPage.FullName.Equals("PinturilloParaPruebas3.CrearSalaPage"))
            {
                if (e.Parameter != null)
                {
                    viewModel.Partida = (clsPartida)e.Parameter;

                    clsJugador jugadorLider = viewModel.Partida.ListadoJugadores.First <clsJugador>(x => x.IsLider);

                    //viewModel.Partida.ListadoJugadores.

                    viewModel.UsuarioPropio             = jugadorLider.Nickname;
                    viewModel.Mensaje.JugadorQueLoEnvia = jugadorLider;
                }
            }
            else
            {
                if (e.Parameter != null)
                {
                    //TODO aqui hace falta pillar el nombre de la partida que has tappeado

                    //Tupla item 1 nick, item 2 nombre partida

                    viewModel.UsuarioPropio      = ((Tuple <string, string>)e.Parameter).Item1;
                    viewModel.Partida.NombreSala = ((Tuple <string, string>)e.Parameter).Item2;
                }
            }
            base.OnNavigatedTo(e);
        }
Exemplo n.º 7
0
        public void Inicio()
        {
            Console.WriteLine("Servidor escuchando en puerto 8000");
            server = new TcpListener(ipendpoint);
            server.Start();

            while (true)
            {
                if (juego.Jugadores.Count < 1)
                {
                    client      = server.AcceptTcpClient();
                    con         = new Connection();
                    con.stream  = client.GetStream();
                    con.streamr = new StreamReader(con.stream);
                    con.streamw = new StreamWriter(con.stream);
                    con.recibe  = con.streamr.ReadLine();
                    clsMensajeBase msjLee = paquete.recibirMensaje(con.recibe);
                    Console.WriteLine("Jugador " + msjLee.Nick + "  se unio a la partida");
                    clsJugador jugador = new clsJugador(msjLee.Nick);
                    juego.agregarJugador(jugador);
                    cliente = new clsCliente(con.stream, con.streamw, con.streamr, msjLee.Nick);
                    router.ListaCliente.Add(cliente);
                    if ((1 - juego.Jugadores.Count) == 0)
                    {
                        router.comienzaPartida();
                    }
                    Thread t = new Thread(cliente.DataIn);
                    t.Start();
                }
            }
        }
        /// <summary>
        /// Método que es llamado cuando un jugador se une a una sala creada.
        /// Se llama al método jugadorAdded de los clientes.
        /// </summary>
        /// <param name="nombreGrupo">nombre de la sala a la que se une</param>
        /// <param name="jugador">jugador que se une</param>
        public void addJugadorToSala(string nombreGrupo, clsJugador jugador)
        {
            clsPartida partida = obtenerPartidaPorNombreSala(nombreGrupo);
            clsJugador jugadorBuscado;

            if (partida != null)
            {
                jugadorBuscado = partida.ListadoJugadores
                                 .FirstOrDefault <clsJugador>(p => p.ConnectionID == jugador.ConnectionID);

                if (jugadorBuscado == null)
                {
                    if (partida.ListadoJugadores.Count < partida.NumeroMaximoJugadores)
                    {
                        jugador.ConnectionID = Context.ConnectionId;
                        Groups.Add(Context.ConnectionId, partida.NombreSala);
                        partida.ListadoJugadores.Add(jugador);


                        Clients.Client(jugador.ConnectionID).jugadorAdded(jugador, partida);
                        Clients.AllExcept(jugador.ConnectionID).jugadorAdded(jugador, partida);
                    }
                }
            }
        }
        /// <summary>
        /// El cliente llama a este método cuando acierte la palabra y haya que sumar
        /// puntos a un usuario.
        /// El método pasa el turno si todos los usuarios (menos el que pintaba)
        /// de una partida han acertado.
        /// </summary>
        /// <param name="connectionIDUSer">connection ID del usuario al que han de sumarse los puntos</param>
        /// <param name="puntosToAdd">cantidad de puntos a sumar</param>
        /// <param name="nombreGrupo">nombre del grupo al que pertenece el usuario</param>
        public void addPuntosToUser(string connectionIDUSer, int puntosToAdd, string nombreGrupo)
        {
            clsPartida partidaActual = obtenerPartidaPorNombreSala(nombreGrupo);
            clsJugador jugador       = partidaActual.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == connectionIDUSer);

            jugador.Puntuacion += puntosToAdd;
            jugador.IsUltimaPalabraAcertada = true;

            Clients.Group(nombreGrupo).puntosAdded(partidaActual);
            //Si todos los jugadores ya han acertado la palabra, se pasa el turno
            int acertantes = 0;

            //Comprobar si todos los jugadores de la partida han acertado ya
            for (int i = 0; i < partidaActual.ListadoJugadores.Count; i++)
            {
                if (partidaActual.ListadoJugadores[i].IsUltimaPalabraAcertada)
                {
                    acertantes++;
                }
            }

            if (acertantes == (partidaActual.ListadoJugadores.Count - 1))    //deben haber acertado todos menos uno (el que pinta)
            {
                //avanzarTurno(partidaActual);
                //Todos han acertado ya
                Clients.Group(nombreGrupo).todosHanAcertado();
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Método que inserta un nuevo jugador en la BD
        /// </summary>
        /// <param name="nuevoJugador">objeto clsJugador nuevoJugador</param>
        /// <returns>int filasAfectadas</returns>
        public int InsertNuevoJugador(clsJugador nuevoJugador)
        {
            clsMyConnection objConnection  = new clsMyConnection();
            SqlConnection   connection     = null;
            SqlCommand      command        = new SqlCommand();
            int             filasAfectadas = 0;

            try
            {
                connection         = objConnection.getConnection();
                command.Connection = connection;

                command.Parameters.Add("@nombreJugador", System.Data.SqlDbType.VarChar).Value = nuevoJugador.NombreJugador;
                command.Parameters.Add("@puntuacionJugador", System.Data.SqlDbType.Int).Value = nuevoJugador.Aciertos;

                command.CommandText = "INSERT INTO TopScoresSimon (nombreJugador, aciertos) VALUES (@nombreJugador, @puntuacionJugador)";

                filasAfectadas = command.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (connection != null)
                {
                    objConnection.closeConnection(ref connection);
                }
            }

            return(filasAfectadas);
        }
        /// <summary>
        /// Método que será llamado por un cliente cuando un contador de un cliente llega a 0,
        /// para evitar que el servidor dé los datos del siguiente turno antes de que todos
        /// los integrantes del grupo hayan terminado.
        /// </summary>
        /// <param name="connectionIDJugador"></param>
        /// <param name="nombreGrupo"></param>
        public void miContadorHaLlegadoACero(string connectionIDJugador, string nombreGrupo)
        {
            bool todosHanTerminado = true;

            //Marcar ese jugador como que su timer ha terminado
            clsPartida partidaActual = obtenerPartidaPorNombreSala(nombreGrupo);

            clsJugador jugadorQueHaTerminado = partidaActual.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == connectionIDJugador);

            jugadorQueHaTerminado.HaTerminadoTimer = true;

            //Comprobar si todos los jugadores de la partida han terminado
            for (int i = 0; i < partidaActual.ListadoJugadores.Count; i++)
            {
                if (!partidaActual.ListadoJugadores[i].HaTerminadoTimer)
                {
                    //Si el timer de alguno NO ha terminado, entonces no todos han terminado
                    todosHanTerminado = false;
                }
            }
            if (todosHanTerminado)
            {
                //Vuelvo a poner sus "haTerminadoTimer" a false
                for (int i = 0; i < partidaActual.ListadoJugadores.Count; i++)
                {
                    partidaActual.ListadoJugadores[i].HaTerminadoTimer = false;
                }

                //Cuando todos han terminado, se llama a avanzar turno
                avanzarTurno(partidaActual);
            }
        }
Exemplo n.º 12
0
        public List <clsJugador> jugadoresGanadores(List <clsJugador> listaJugadores)
        {
            List <clsJugador> listaARetornar = new List <clsJugador>();

            for (int i = 0; i < listaJugadores.Count; i++)
            {
                List <clsCarton> listaCartones = new List <clsCarton>();

                for (int x = 0; x < listaJugadores[i].ListaCartones.Count; x++)
                {
                    if (listaJugadores[i].ListaCartones[x].NumeroAReducirParaGanar == 0)
                    {
                        listaCartones.Add(listaJugadores[i].ListaCartones[x]);
                    }
                }

                if (listaCartones.Count > 0)
                {
                    clsJugador jugador = new clsJugador();
                    jugador.ListaCartones = listaCartones;
                    jugador.NombreJugador = listaJugadores[i].NombreJugador;
                    listaARetornar.Add(jugador);
                }
            }
            return(listaARetornar);
        }
Exemplo n.º 13
0
 public void quitarJugador(clsJugador j)
 {
     if (Jugadores.Exists(x => x.Nick == j.Nick))
     {
         Jugadores.Remove(j);
     }
     if (Jugadores.Count() == 0)
     {
         //  finJuego(Color.Transparent);
     }
 }
        /// <summary>
        /// A este método lo llamará el cliente que cree una partida, y
        /// así se añadirá al listado de partidas del servidor y se
        /// añadirá el usuario creador como líder de la partida.
        /// Se añadirá el nuevo grupo y los clientes recibirán las partidas
        /// para que vean la nueva partida reflejada en su listado de salas.
        /// El que llama también recibirá la partida creada.
        /// </summary>
        /// <param name="partida">partida creada</param>
        /// <param name="nickLider">nick del líder (quien ha creado la partida)</param>
        public void añadirPartida(clsPartida partida, String nickLider)
        {
            //clsJugador jugador = partida.ListadoJugadores.First<clsJugador>(j => j.ConnectionID == Context.ConnectionId);

            clsJugador lider = new clsJugador(Context.ConnectionId, 0, nickLider, false, false, true, false);

            partida.ListadoJugadores.Add(lider);
            Groups.Add(Context.ConnectionId, partida.NombreSala);
            listadoSalas.ListadoPartidas.Add(partida);

            Clients.All.recibirSalas(listadoSalas.ListadoPartidas);
            Clients.Caller.salaCreada(partida);
        }
Exemplo n.º 15
0
        /// <summary>
        /// Método que obtiene la lista completa de jugadores aciertos ordenados de mayor a menor
        /// </summary>
        /// <returns>ObservableCollection<clsJugador> listaJugadores</returns>
        public ObservableCollection <clsJugador> GetListaJugadores()
        {
            clsMyConnection objConnection = new clsMyConnection();
            SqlConnection   connection    = null;
            SqlCommand      command       = new SqlCommand();
            SqlDataReader   reader        = null;

            clsJugador objJugador;
            ObservableCollection <clsJugador> listaJugadores = new ObservableCollection <clsJugador>();

            try
            {
                connection         = objConnection.getConnection();
                command.Connection = connection;

                command.CommandText = "SELECT * FROM TopScoresSimon ORDER BY aciertos DESC";
                reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        objJugador               = new clsJugador();
                        objJugador.IdJugador     = (int)reader["idJugador"];
                        objJugador.NombreJugador = (string)reader["nombreJugador"];
                        objJugador.Aciertos      = (int)reader["aciertos"];

                        listaJugadores.Add(objJugador);
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (connection != null)
                {
                    objConnection.closeConnection(ref connection);
                }
            }

            return(listaJugadores);
        }
        /// <summary>
        //  A este método se le llama cuando hay un nuevo líder, para guardar el dato
        //  en el listado de partidas del servidor
        /// </summary>
        /// <param name="nickUsuario">nick del nuevo lider</param>
        /// <param name="nombreGrupo">nombre del grupo al que pertenece el cliente que llama</param>
        public void habemusNuevoLider(string nickUsuario, string nombreGrupo)
        {
            clsPartida partida = obtenerPartidaPorNombreSala(nombreGrupo);

            //Se ponen todos los "isLider" a false (en realidad creo que no haría falta ya que
            //el anterior líder habría salido ya de la lista de jugadores
            for (int i = 0; i < partida.ListadoJugadores.Count; i++)
            {
                partida.ListadoJugadores[i].IsLider = false;
            }

            //Se pone el nuevo lider
            clsJugador jugador = partida.ListadoJugadores.FirstOrDefault <clsJugador>(j => j.Nickname == nickUsuario);

            jugador.IsLider = true;
        }
Exemplo n.º 17
0
        public List <clsJugador> crearJugador(List <clsJugador> listaJugadores, int nombreUsuario, int cantidadCartones, int cantidadNumerosAJugar, int modalidad)
        {
            clsJugador jugador = new clsJugador(nombreUsuario, cantidadCartones, cantidadNumerosAJugar, modalidad);

            if (!(listaJugadores.Count == 0))
            {
                #region validar cartones repetidos
                //Recorre Cada Jugador
                for (int x = 0; x < listaJugadores.Count; x++)
                {
                    bool similar = true;
                    //Recorre cada carton de jugador x
                    //   if (listaJugadores[x].ListaCartones.)
                    for (int i = 0; i < listaJugadores[x].ListaCartones.Count; i++)
                    {
                        //Recorre nuevo jugador
                        for (int z = 0; z < jugador.ListaCartones.Count; z++)
                        {
                            //recorre cada celda
                            for (int p = 0; p < 5; p++)
                            {
                                for (int q = 0; q < 5; q++)
                                {
                                    if (!(q == 3 && p == 3))
                                    {
                                        //valida si encuentra una diferencia
                                        if (!(listaJugadores[x].ListaCartones[i].Columnas[p][q].Numero == jugador.ListaCartones[z].Columnas[p][q].Numero))
                                        {
                                            similar = false;
                                        }
                                    }
                                }
                            }
                            if (similar)
                            {
                                jugador = new clsJugador(nombreUsuario, cantidadCartones, cantidadNumerosAJugar, modalidad);
                                x       = -1;
                            }
                        }
                    }
                }
                #endregion
            }

            listaJugadores.Add(jugador);
            return(listaJugadores);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Hace comenzar una nueva partida, cogiendo a los dos jugadores que estén primero en la cola
        /// </summary>
        /// <param name="categoria">Categoria en la que se jugará la partida</param>
        public void comenzarPartida(clsCategoriaYJugadoresBuscando categoria)
        {
            bool clientesDisponibles = false;

            //Coge a los dos jugadores que estén primero en la cola (Aunque esto no es una cola como tal xD, estaría bien cambiarlo)
            //clsJugador jugador1 = categoria.JugadoresBuscando[0];
            //clsJugador jugador2 = categoria.JugadoresBuscando[1];

            Queue <clsJugador> colaJugadoresBuscando = new Queue <clsJugador>(categoria.JugadoresBuscando);
            clsJugador         jugador1 = colaJugadoresBuscando.Dequeue();
            clsJugador         jugador2 = colaJugadoresBuscando.Dequeue();


            //Crea una lista vacia de preguntas (cuando alguno de los clientes entre en la partida entonces se solicitarán las preguntas, no sabía hacerlo de otra forma, haciendolo aqui tengo problemas con la asincronia)
            List <clsQuestion> questions = new List <clsQuestion>();

            //Crea el objeto con la partida
            clsPartida partida = new clsPartida(clsPartida.IdIndex + categoria.Nombre, jugador1, jugador2, questions);

            //Añade la partida a la lista de partidas de la categoría dada
            categoria.Partidas.Add(partida);

            //Elimina de la cola a ambos jugadores que van a empezar a jugar
            String connectionID;
            int    eliminadosDeCola = 0;

            //Por cada categoria o cuando ambos hayan sido eliminados de la cola
            for (int i = 0; i < partidas.Lista.Count && eliminadosDeCola < 2; i++)
            {
                //Por cada jugador en cola o cuando ambos hayan sido eliminados de la cola
                for (int j = 0; j < partidas.Lista[i].JugadoresBuscando.Count && eliminadosDeCola < 2; j++)
                {
                    connectionID = partidas.Lista[i].JugadoresBuscando[j].ConnectionID;

                    //Si es el jugador1 o jugador2, lo saca de cola
                    if (connectionID == partida.Jugador1.ConnectionID || connectionID == partida.Jugador2.ConnectionID)
                    {
                        partidas.Lista[i].JugadoresBuscando.RemoveAt(j);
                        eliminadosDeCola++;
                    }
                }
            }

            //Indica a ambos jugadores que la partida comienza, mandando la informacion de esta (nombre de ambos jugadores y lista de preguntas)
            Clients.Client(jugador1.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas);
            Clients.Client(jugador2.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas);
        }
Exemplo n.º 19
0
        //public bool PuedeVoltear
        //{
        //    get
        //    {
        //        return puedeVoltear;
        //    }
        //    set
        //    {
        //        puedeVoltear = value;
        //    }
        //}

        #endregion

        #region Constructores
        public clsJuegoVM()
        {
            //Relleno la lista de cartas
            clsListadoCompletoCartas listadoCartas = new clsListadoCompletoCartas();

            listadoCompletoCartas = listadoCartas.ListadoCompletoCartasEnCasilla();
            //El tablero inicialmente está habilitado
            tableroHabilitado = true;
            //Instancia el jugador de la partida
            objJugador = new clsJugador();
            commandAbandonarPartida = new DelegateCommand(ComprobarSalirPartida);

            //Cosas del DispatcherTimer
            tiempoPuntuacion          = new DispatcherTimer();
            tiempoPuntuacion.Tick    += MostrarTiempo;
            tiempoPuntuacion.Interval = new TimeSpan(0, 0, 1);
            //Empieza a contar el tiempo al comenzar la partida
            tiempoPuntuacion.Start();
        }
        /// <summary>
        /// Se ejecuta cuando se ha navegado a esta pantalla.
        ///
        /// Obtiene de la anterior pantalla tanto la partida como el nombre de usuario, necesarios para poder preparar esta pantalla para el inicio de la partida.
        ///
        /// Al acabar, indica al servidor que ya ha navegado.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var lastPage = Frame.BackStack.Last().SourcePageType;

            //Frame.BackStack.Clear();
            //if (e.SourcePageType.FullName.Equals("Pinturillo.CrearSalaPage"))
            if (lastPage.FullName.Equals("Pinturillo.SalaEspera"))
            {
                if (e.Parameter != null)
                {
                    Tuple <String, clsPartida> partidaConNick = (Tuple <String, clsPartida>)e.Parameter;

                    //viewModel.UsuarioPropio.Nickname = partidaConNick.Item1;
                    viewModel.Partida = partidaConNick.Item2;
                    viewModel.NotifyPropertyChanged("Partida");

                    clsJugador jugadorLider = viewModel.Partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.Nickname == partidaConNick.Item1);

                    //viewModel.Partida.ListadoJugadores.

                    viewModel.UsuarioPropio             = jugadorLider;
                    viewModel.Mensaje.JugadorQueLoEnvia = viewModel.UsuarioPropio;


                    //Este invoke solo lo puede emitir el lider (que si no el servidor recibe 5 llamadas pa lo mismo)
                    //Pero no sé como hacer que solo se invoke una vez ya que aun no está puesto el connectionID del jugador actual en la partida xD
                    //De momento lo he apañao en el servidor poniendo que si es null la partida no haga nada

                    //if (viewModel.UsuarioPropio.IsLider && viewModel.PuedesFuncionar)
                    //    //Esto es un apaño, tengo que cambiarlo para que haga el invoke "el primero que no sea null" (por si el usuario 0 se habia salido o algo asi)
                    //{
                    //    proxy.Invoke("comenzarPartidaEnGrupo", viewModel.Partida);
                    //}
                }
            }


            //Notificar al servidor que ya he navegado
            proxy.Invoke("yaHeNavegado", viewModel.Partida.NombreSala);

            base.OnNavigatedTo(e);
        }
Exemplo n.º 21
0
        public clsJuegoVM()
        {
            listadoBotones          = new clsListadoBotones().ListadoBotones();
            comandoAbandonarPartida = new DelegateCommand(AbandonarPartidaExecute);
            listaRandom             = new ObservableCollection <clsBoton>();
            objJugador = new clsJugador();


            //Genera un primer sonido
            operacionesListado.GenerarSonidosAleatorios(listaRandom);
            //Al generar un primer sonido, contamos como que se ha generado una repetición (para que corresponda con el índice de la lista)
            repeticiones = 0;

            //Cada segundo suena un sonido de la secuencia
            //Si jugador falla se acaba la partida
            hacerSonidos          = new DispatcherTimer();
            hacerSonidos.Tick    += HacerSonidosIluminarBoton;
            hacerSonidos.Interval = new TimeSpan(0, 0, 1);
            hacerSonidos.Start();
        }
        /// <summary>
        /// Metodo para indicar que se comienza la partida
        /// Se establecen propiedades como el turno, la ronda, la palabra en juego, IsJugandose.
        /// Llama al OnPartidaComenzada de los clientes del grupo.
        /// </summary>
        /// <param name="partida">partida que comienza</param>
        public void comenzarPartidaEnGrupo(clsPartida partida)
        {
            partida = obtenerPartidaPorNombreSala(partida.NombreSala);
            if (partida != null)
            {
                //Se pone el primer turno de la primera ronda
                //el turno es el del primer jugador
                if (partida.ListadoJugadores.Count > 0)
                {
                    partida.ConnectionIDJugadorActual = partida.ListadoJugadores[0].ConnectionID;
                }
                partida.Turno          = 1;
                partida.RondaActual    = 1;
                partida.PalabraEnJuego = Utilidad.obtenerPalabraAleatoria();

                //TODO rellenar el listado de posiciones a descubrir
                partida.PosicionesADescubrir = Utilidad.rellenarPosicionesADescubrir(partida.PalabraEnJuego);

                partida.IsJugandose = true;


                //Por si acaso se le pone a todos que NO es su turno
                for (int i = 0; i < partida.ListadoJugadores.Count; i++)
                {
                    partida.ListadoJugadores[i].IsMiTurno = false;
                }


                //Se le pone que es su turno al jugador
                clsJugador jugador = partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == partida.ConnectionIDJugadorActual);

                jugador.IsMiTurno = true;


                //Aqui haría falta guardar esta partida en la lista de partidas

                Clients.Group(partida.NombreSala).onPartidaComenzada(partida);
            }
        }
        /// <summary>
        /// Callback sobreescrito que se llama cuando un cliente se desconecta.
        /// Este método llama a jugador ha salido si el cliente desconectado pertenecía a un grupo.
        /// </summary>
        /// <param name="stopCalled">indica si la desconexión fue forzosa o no</param>
        /// <returns></returns>
        public override Task OnDisconnected(bool stopCalled)
        {
            //Obtener el ID de conexion del usuario que ha salido
            clsJugador jugadorQueSeDesconecta = null;
            string     nombreGrupo            = "";
            bool       encontrado             = false;

            for (int i = 0; i < listadoSalas.ListadoPartidas.Count && !encontrado; i++)
            {
                for (int j = 0; j < listadoSalas.ListadoPartidas[i].ListadoJugadores.Count && !encontrado; j++)
                {
                    if (listadoSalas.ListadoPartidas[i].ListadoJugadores[j].ConnectionID == Context.ConnectionId)
                    {
                        jugadorQueSeDesconecta = listadoSalas.ListadoPartidas[i].ListadoJugadores[j];
                        nombreGrupo            = listadoSalas.ListadoPartidas[i].NombreSala;
                        encontrado             = true;
                    }
                }
            }
            //Comprobar si estaba en algun grupo

            if (encontrado) //Si estaba en un grupo, sacarlo
            {
                jugadorHaSalido(jugadorQueSeDesconecta.Nickname, nombreGrupo);
            }

            encontrado = false;
            for (int i = 0; i < this.listadoNickConConnectionID.ListadoNickConConnectionID.Count && !encontrado; i++)
            {
                if (Context.ConnectionId == this.listadoNickConConnectionID.ListadoNickConConnectionID[i].Item2)
                {
                    encontrado = true;
                    this.listadoNickConConnectionID.ListadoNickConConnectionID.RemoveAt(i);    //Se elimina del listado de nicks
                }
            }

            return(base.OnDisconnected(stopCalled));
        }
Exemplo n.º 24
0
        /// <summary>
        /// Sale del juego, haciendo que salga de la cola si está en alguna o de la partida si está en una
        /// </summary>
        public void salir()
        {
            //Sale de la cola si está en alguna
            salirDeCola();

            clsPartida partida = partidas.getMatchByConnectionID(Context.ConnectionId);

            //Si está en partida
            if (partida != null)
            {
                //Borra la partida
                for (int i = 0; i < partidas.Lista.Count; i++)
                {
                    for (int j = 0; j < partidas.Lista[i].Partidas.Count; j++)
                    {
                        if (partidas.Lista[i].Partidas[j].Id == partida.Id)
                        {
                            partidas.Lista[i].Partidas.Remove(partida);
                        }
                    }
                }

                clsJugador jugador1 = partida.Jugador1;
                clsJugador jugador2 = partida.Jugador2;

                //Indica al otro jugador de la partida que la partida ha acabado porque uno de los jugadores se ha ido
                if (jugador1.ConnectionID == Context.ConnectionId)
                {
                    Clients.Client(jugador2.ConnectionID).jugadorSeFue();
                }
                else
                {
                    Clients.Client(jugador1.ConnectionID).jugadorSeFue();
                }
            }
        }
        /// <summary>
        /// Método que avanza un turno en una partida, cambiando todas las propiedades
        /// pertinentes como el turno actual, la ronda y el jugador actual.
        /// Se llamará al método OnHaCambiadoElTurno de todos los clientes del grupo.
        /// </summary>
        /// <param name="partida">partida en juego en la que se pasará el turno</param>
        public void avanzarTurno(clsPartida partida)
        {
            clsPartida partidaObtenida = obtenerPartidaPorNombreSala(partida.NombreSala);

            if (partidaObtenida.RondaActual <= partida.NumeroRondasGlobales)
            {
                //El cliente que termine su turno, llama a este método
                //este método avisa a los clientes de que el turno ha cambiado
                //si el cliente detecta que el id del nuevo jugador es el propio
                //hace cosas (habilita su canvas), los demas canvas de inhabilitan
                //se debe cambiar la palabra en juego

                //Obtengo el jugador actual
                clsJugador jugadorJugando = partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == partida.ConnectionIDJugadorActual);


                ////Se ponen todos los "isUltimaPalabraAcertada" a false
                for (int i = 0; i < partida.ListadoJugadores.Count; i++)
                {
                    partida.ListadoJugadores[i].IsUltimaPalabraAcertada = false;
                    //Por si acaso se le pone a todos que NO es su turno
                    partida.ListadoJugadores[i].IsMiTurno = false;
                }

                //Obtengo la posicion en la lista de jugadores del jugador actual
                int posicion = -1;

                for (int i = 0; i < partida.ListadoJugadores.Count || posicion == -1; i++)
                {
                    if (partida.ListadoJugadores[i].ConnectionID == jugadorJugando.ConnectionID)
                    {
                        posicion = i;
                    }
                }
                //Asigno una nueva palabra
                partida.PalabraEnJuego = Utilidad.obtenerPalabraAleatoria();
                //TODO rellenar el listado de posiciones a descubrir
                partida.PosicionesADescubrir = Utilidad.rellenarPosicionesADescubrir(partida.PalabraEnJuego);


                //Cambio el jugador jugando
                if (posicion < partida.ListadoJugadores.Count - 1)
                {
                    partida.ConnectionIDJugadorActual = partida.ListadoJugadores[(posicion + 1)].ConnectionID;
                }
                else
                {
                    //Si ya han jugado todos los jugadores de la lista, se vuelve a empezar
                    partida.ConnectionIDJugadorActual = partida.ListadoJugadores[0].ConnectionID;
                }


                //Se le pone que es su turno al jugador
                clsJugador jugador = partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == partida.ConnectionIDJugadorActual);

                jugador.IsMiTurno = true;



                //Cambio el turno/ronda
                if (partida.Turno < partida.ListadoJugadores.Count)
                {
                    partida.Turno++;
                    if (jugadorJugando.IsDesconectado)
                    {
                        partida.Turno--;
                        jugadorJugando.IsDesconectado = false;
                    }
                }
                else
                {
                    partida.Turno = 1;
                    if (partida.RondaActual < partida.NumeroRondasGlobales)
                    {
                        partida.RondaActual++;
                    }
                    else
                    {
                        //Terminaria la partida y se harian cosas
                        Clients.Group(partida.NombreSala).HaTerminadoLaPartida();
                    }
                }

                //Llamo al metodo haCambiadoElTurno de los clientes, y en ese metodo se debera comprobar si le toca al propio usuario
                Clients.Group(partida.NombreSala).haCambiadoElTurno(partida);
            }
        }
Exemplo n.º 26
0
 /// <summary>
 /// Método que inserta un nuevo jugador en la BD
 /// </summary>
 /// <param name="nuevoJugador">objeto clsJugador nuevoJugador</param>
 /// <returns>int que representa la filas afectadas al ejecutar la inserción</returns>
 public int InsertNuevoJugador(clsJugador nuevoJugador)
 {
     return(new clsOperacionesJugadorDAL().InsertNuevoJugador(nuevoJugador));
 }
        /// <summary>
        /// Se ejecutará cuando el servidor indique que la partido ha comenzado.
        ///
        /// Se inicia el temporizador para el primer turno.
        ///
        /// Si es el turno del cliente, se habilita el canvas, si no, se deshabilita.
        ///
        /// Se establecerá la nueva palabra a acertar, mostrándola oculta con guiones en la interfaz.
        /// </summary>
        /// <param name="obj">La partida que acaba de comenzar</param>
        private async void onPartidaComenzada(clsPartida obj)
        {
            await Windows.ApplicationModel.Core.CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                if (viewModel.PuedesFuncionar)
                {
                    if (obj.ListadoJugadores != null && viewModel.UsuarioPropio.Nickname != null)
                    {
                        obj.ListadoMensajes = new System.Collections.ObjectModel.ObservableCollection <clsMensaje>();

                        viewModel.Partida = obj;
                        viewModel.NotifyPropertyChanged("Partida");
                        viewModel.hanAcertadoTodos = false;
                        viewModel.UsuarioPropio    = obj.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.Nickname == viewModel.UsuarioPropio.Nickname);

                        //Iniciamos el timer
                        viewModel.DispatcherTimer.Start();

                        if (obj.ConnectionIDJugadorActual == viewModel.UsuarioPropio.ConnectionID)
                        //es nuestro turno
                        {
                            if (viewModel.TimeMax >= 88)
                            {
                                txtTurno.Visibility    = Visibility.Visible;
                                viewModel.TurnoJugador = "ES TU TURNO";
                                viewModel.NotifyPropertyChanged("TurnoJugador");
                            }

                            //Habilitar el canvas
                            // viewModel.TipoEntradaInkCanvas = CoreInputDeviceTypes.Mouse;
                            inkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse;
                            //NotifyPropertyChanged("TipoEntradaInkCanvas");
                            //palabra a mostrar será la palabra en juego
                            viewModel.PalabraAMostrar = obj.PalabraEnJuego;
                            viewModel.NotifyPropertyChanged("PalabraAMostrar");
                            viewModel.IsMiTurno = true;
                            viewModel.NotifyPropertyChanged("IsMiTurno");
                        }
                        else
                        {
                            //No es nuestro turno
                            if (viewModel.TimeMax >= 88)
                            {
                                txtTurno.Visibility    = Visibility.Visible;
                                clsJugador jugador     = viewModel.Partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == viewModel.Partida.ConnectionIDJugadorActual);
                                viewModel.TurnoJugador = "ES EL TURNO DE " + jugador.Nickname;
                                viewModel.NotifyPropertyChanged("TurnoJugador");
                            }
                            //Deshabilitar el canvas
                            // viewModel.TipoEntradaInkCanvas = CoreInputDeviceTypes.None;
                            inkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.None;
                            //  NotifyPropertyChanged("TipoEntradaInkCanvas");
                            //palabra a mostrar será  ___
                            //viewModel.PalabraAMostrar = "*******"; //esto ponerlo con tantos * como letras tenga y tal
                            viewModel.IsMiTurno = false;
                            viewModel.NotifyPropertyChanged("IsMiTurno");
                            String[] arrayPalabras = obj.PalabraEnJuego.Split(' ');
                            String palabraResuelta = "";
                            foreach (var palabra in arrayPalabras)
                            {
                                palabraResuelta += new String('-', palabra.Length);
                                palabraResuelta += " ";
                            }
                            viewModel.PalabraAMostrar = palabraResuelta;
                            viewModel.NotifyPropertyChanged("PalabraAMostrar");
                        }
                        //viewModel.PuedesFuncionar = false;
                        //viewModel.NotifyPropertyChanged("PuedesFuncionar");
                    }
                }
            });
        }
        /// <summary>
        /// Se ejecutará cuando el servidor indique se ha cambiado el turno.
        ///
        /// Se reiniciará el temporizador
        /// Se limpiará el canvas, y si es el turno de este cliente se habilitará para que se pueda pintar en el, si no, se deshabilitará.
        ///
        /// Se establecerá la nueva palabra a acertar, mostrándola oculta con guiones en la interfaz.
        /// </summary>
        /// <param name="obj">La partida que se está jugando</param>
        private async void onHaCambiadoElTurno(clsPartida obj)
        {
            await Windows.ApplicationModel.Core.CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                if (viewModel.PuedesFuncionar)
                {
                    if (obj.ListadoJugadores != null && viewModel.UsuarioPropio.Nickname != null)
                    {
                        viewModel.Partida = obj;
                        viewModel.NotifyPropertyChanged("Partida");
                        viewModel.HaAcertado       = false;
                        viewModel.UsuarioPropio    = obj.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.Nickname == viewModel.UsuarioPropio.Nickname);
                        viewModel.hanAcertadoTodos = false;
                        //Iniciamos el timer
                        viewModel.TimeMax = TIME_MAX;
                        viewModel.NotifyPropertyChanged("TimeMax");
                        viewModel.LblTemporizador = TIME_MAX.ToString();
                        viewModel.NotifyPropertyChanged("LblTemporizador");
                        viewModel.tiempoEspera = TIME_WAIT;
                        viewModel.DispatcherTimer.Start();

                        //Se limpia el canvas
                        inkCanvas.InkPresenter.StrokeContainer.Clear();

                        if (obj.ConnectionIDJugadorActual == viewModel.UsuarioPropio.ConnectionID)
                        //es nuestro turno
                        {
                            //Habilitar el canvas
                            // viewModel.TipoEntradaInkCanvas = CoreInputDeviceTypes.Mouse;
                            if (viewModel.TimeMax > 88)
                            {
                                txtTurno.Visibility    = Visibility.Visible;
                                viewModel.TurnoJugador = "ES TU TURNO";
                                viewModel.NotifyPropertyChanged("TurnoJugador");
                            }

                            inkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse;
                            //NotifyPropertyChanged("TipoEntradaInkCanvas");
                            //palabra a mostrar será la palabra en juego
                            viewModel.PalabraAMostrar = obj.PalabraEnJuego;
                            viewModel.NotifyPropertyChanged("PalabraAMostrar");
                            viewModel.IsMiTurno = true;
                            viewModel.NotifyPropertyChanged("IsMiTurno");
                        }
                        else
                        {
                            //No es nuestro turno
                            if (viewModel.TimeMax >= 88)
                            {
                                txtTurno.Visibility    = Visibility.Visible;
                                clsJugador jugador     = viewModel.Partida.ListadoJugadores.FirstOrDefault <clsJugador>(x => x.ConnectionID == viewModel.Partida.ConnectionIDJugadorActual);
                                viewModel.TurnoJugador = "ES EL TURNO DE " + jugador.Nickname;
                                viewModel.NotifyPropertyChanged("TurnoJugador");
                            }

                            //Deshabilitar el canvas
                            inkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.None;
                            //InkDrawingAttributes att = new InkDrawingAttributes();
                            //att.Color = Windows.UI.Colors.Black;
                            //inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(att);
                            ballpointpen.SelectedBrushIndex = 0;
                            inkToolbar.ActiveTool           = null;

                            //  NotifyPropertyChanged("TipoEntradaInkCanvas");
                            //palabra a mostrar será  ___
                            // viewModel.PalabraAMostrar = "*******"; //esto ponerlo con tantos * como letras tenga y tal

                            String[] arrayPalabras = obj.PalabraEnJuego.Split(' ');
                            String palabraResuelta = "";
                            foreach (var palabra in arrayPalabras)
                            {
                                palabraResuelta += new String('-', palabra.Length);
                                palabraResuelta += " ";
                            }
                            viewModel.PalabraAMostrar = palabraResuelta;
                            viewModel.IsMiTurno       = false;
                            viewModel.NotifyPropertyChanged("IsMiTurno");
                            viewModel.NotifyPropertyChanged("PalabraAMostrar");                         // NotifyPropertyChanged("PalabraAMostrar");
                        }
                    }
                }
            });
        }
Exemplo n.º 29
0
 public void agregarJugador(clsJugador j)
 {
     j.Color = listaColores[Jugadores.Count];
     Jugadores.Add(j);
 }