Exemple #1
0
        /// <summary>
        /// Lógica para crear una sala y que los jugadores se puedan unir.
        /// </summary>
        /// <param name="nuevaSala">Sala a crear</param>
        /// <param name="jugador">Jugador que crea la sala</param>
        public void CrearSala(Sala nuevaSala, Jugador jugador)
        {
            IJuegoCallback callbackActual = JuegoCallbackActual;

            nuevaSala.Id = ObtenerNuevoCodigoSala();
            nuevaSala.JugadoresEnSala.Add(jugador, callbackActual);

            salasCreadas.Add(nuevaSala);
            callbackActual.NotificarCreacionDeSala(nuevaSala);
        }
Exemple #2
0
        /// <summary>
        /// Lógica para unir un jugador a la sala.
        /// </summary>
        /// <param name="salaAUnirse">Sala a la cual se va a unir</param>
        /// <param name="jugador">Jugador que se va a unir a la sala</param>
        public void UnirseASala(Sala salaAUnirse, Jugador jugador)
        {
            ResultadoUnionSala resultadoUnionSala = ResultadoUnionSala.NoExisteId;
            IJuegoCallback     callbackActual     = JuegoCallbackActual;

            var salaBuscada = salasCreadas.Find(sala => sala.Id.Equals(salaAUnirse.Id));

            if (salaBuscada != null)
            {
                if (salaBuscada.Contraseña.Equals(salaAUnirse.Contraseña))
                {
                    if (salaBuscada.EnJuego)
                    {
                        resultadoUnionSala = ResultadoUnionSala.EnJuego;
                    }
                    else
                    {
                        if (HayCupoEnSala(salaBuscada))
                        {
                            resultadoUnionSala = ResultadoUnionSala.UnionExitosa;
                        }
                        else
                        {
                            resultadoUnionSala = ResultadoUnionSala.NoHayCupo;
                        }
                    }
                }
                else
                {
                    resultadoUnionSala = ResultadoUnionSala.ContraseñaIncorrecta;
                }
            }

            callbackActual.NotificarUnionASala(resultadoUnionSala);
            if (salaBuscada != null && resultadoUnionSala == ResultadoUnionSala.UnionExitosa)
            {
                callbackActual.ObtenerInformacionDeSala(salaBuscada);
                salaBuscada.JugadoresEnSala.Add(jugador, callbackActual);
                AgregarNuevoJugadorEnSala(salaBuscada, jugador);
            }
        }
Exemple #3
0
        /// <summary>
        /// Lógica para eliminar al jugador de una sala.
        /// </summary>
        /// <param name="idSala">Id de sala a salirse</param>
        /// <param name="nickname">Nickname del jugador a salirse</param>
        public void SalirDeSala(string idSala, string nickname)
        {
            var salaActual = salasCreadas.Find(sala => sala.Id.Equals(idSala));

            if (salaActual != null)
            {
                IJuegoCallback callbackActual = JuegoCallbackActual;
                Jugador        jugadorBuscado = salaActual.JugadoresEnSala.Keys.
                                                ToList().FirstOrDefault(jugador => jugador.Nickname.Equals(nickname));

                if (EsCreadorDeLaSala(salaActual, jugadorBuscado))
                {
                    callbackActual.EliminarCreador();
                    salaActual.JugadoresEnSala.Remove(jugadorBuscado);
                    EliminarSala(salaActual);
                }
                else
                {
                    callbackActual.NotificarSalidaDeSala();
                    salaActual.JugadoresEnSala.Remove(jugadorBuscado);
                    NotificarJugadorEliminado(salaActual, jugadorBuscado);

                    if (salaActual.EnJuego)
                    {
                        salaActual.PartidaDeSala.SacarJugador(jugadorBuscado);

                        if (salaActual.PartidaDeSala.HaySuficientesJugadores())
                        {
                            salaActual.PartidaDeSala.ReiniciarTurnos();
                            CambiarTurno(salaActual);
                        }
                        else
                        {
                            EliminarSalaPorFaltaDeJugadores(salaActual);
                        }
                    }
                }
            }
        }