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