/// <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); }
/// <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); } }
/// <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); } } } } }