/// <summary> /// Realiza el proceso para cambiar el turno. Verifica antes si el jugador que acaba de tirar no ha ganado. Y cambia la posición de los bonus si termino una ronda de turnos. /// </summary> /// <param name="nombreUsuario"> /// Nombre del jugador que acaba de pasar su turno. /// </param> public void CambiarTurno(String nombreUsuario) { try { PartidaEnJuego = clientePartida.ObtenerPartida(PartidaEnJuego.Nombre); bonus = false; if (PartidaEnJuego.Turno == PartidaEnJuego.JugadoresPartida.ElementAt(0).Value.Turno.NumeroTurno&& nombreUsuario.Equals(Jugador.NombreUsuario)) { clientePartida.CambiarPosicionBonus(PartidaEnJuego.Nombre); } DispatcherTimer temporizadorMovimiento = new DispatcherTimer(); temporizadorMovimiento.Interval = new TimeSpan(0, 0, 2); temporizadorMovimiento.Tick += (a, b) => { temporizadorMovimiento.Stop(); try { if (!VerificarGanador(nombreUsuario)) { SiguienteJugador(); } else { validarConectadoPartida.Stop(); Resultados resultados = new Resultados(this, posicionJugadores); resultados.ShowDialog(); } } catch (CommunicationException) { EnviarMensajeError(); } }; temporizadorMovimiento.Start(); } catch (CommunicationException) { EnviarMensajeError(); } }
/// <summary> /// Constructor de la ventana Espera. /// </summary> /// <param name="jugador"> /// Objeto jugador que se mandó desde el menú. /// </param> /// <param name="partida"> /// Objeto partida que se mandó desde el menú. /// </param> /// /// <param name="clientePartida"> /// Conexión con el servidor para acceder a los métodos que proporciona sobre las partidas. /// </param> /// /// <param name="clienteChat"> /// Conexión con el servidor para acceder a los métodos que proporciona sobre el chat. /// </param> /// /// <param name="partidas"> /// Objeto mensajes que implementa los métodos que reciben respuesta del servidor, sobre las partidas. /// </param> /// /// <param name="mensajes"> /// Objeto mensajes que implementa los métodos que reciben respuesta del servidor, sobre el chat. /// </param> public Partida(ServiceSYE.Jugador jugador, ServiceSYE.Partida partida, ServiceSYE.PartidaClient clientePartida, ServiceSYE.ChatClient clienteChat, Partidas partidas, Mensajes mensajes) { InitializeComponent(); this.Title = this.Title + " - " + jugador.NombreUsuario; partidas.Partida = this; mensajes.Partida = this; this.Jugador = jugador; this.clienteChat = clienteChat; this.clientePartida = clientePartida; this.clienteJugador = new ServiceSYE.JugadorClient(); try { this.PartidaEnJuego = clientePartida.ObtenerPartida(partida.Nombre); DispatcherTimer temporizadorInicio = new DispatcherTimer(); temporizadorInicio.Interval = new TimeSpan(0, 0, 5); temporizadorInicio.Tick += (a, b) => { temporizadorInicio.Stop(); if (PartidaEnJuego.JugadoresPartida.ElementAt(0).Value.NombreUsuario.Equals(jugador.NombreUsuario)) { try { clienteChat.EnviarMensajePartida("", PartidaEnJuego.Nombre, 1); } catch (CommunicationException) { EnviarMensajeError(); } } }; temporizadorInicio.Start(); CargarTablero(); CargarBonus(); this.Jugador = ObtenerTurno(PartidaEnJuego.JugadoresPartida, this.Jugador); EnviarMensajeTurnos(); ValidarConectado(); } catch (CommunicationException) { EnviarMensajeError(); } }
/// <summary> /// Realiza el proceso para mover la ficha del jugador. /// </summary> /// <param name="nombreUsuario"> /// Nombre del jugador del que se moverá su ficha. /// </param> /// <param name="mensaje"> /// Mensaje que envía el juego. /// En este caso se recibe el mansaje para saber si cuando el jugador tiro en bonus obtuvo un 4, que en ese caso no se realiza ningún movimiento de la ficha. /// </param> public void DeterminarMovimiento(String nombreUsuario, String mensaje) { try { PartidaEnJuego = clientePartida.ObtenerPartida(PartidaEnJuego.Nombre); if (bonus && mensaje.Equals("4")) { CambiarTurno(nombreUsuario); } else { lb_Dado.Content = ""; ServiceSYE.Jugador jugadorMovimiento = DeterminarJugadorMovimiento(nombreUsuario); MoverFicha(jugadorMovimiento); if (jugadorMovimiento.Turno.Casilla.Movimiento != 0) { MoverFichaSerpienteOEscalera(jugadorMovimiento); } else { if (jugadorMovimiento.Turno.Casilla.Bonus) { bonus = true; TirarBonus(jugadorMovimiento); } else { CambiarTurno(nombreUsuario); } } } } catch (CommunicationException) { EnviarMensajeError(); } }
/// <summary> /// Constructor de la ventana Espera. /// </summary> /// <param name="jugador"> /// Objeto jugador que se mandó desde el menú. /// </param> /// <param name="partida"> /// Objeto partida que se mandó desde el menú. /// </param> public Espera(ServiceSYE.Jugador jugador, ServiceSYE.Partida partida) { InitializeComponent(); if (lb_Esperando.Content.ToString().Substring(0, 1).Equals("E")) { lb_Esperando.FontSize = 40; } this.Title = this.Title + " - " + jugador.NombreUsuario; this.Jugador = jugador; this.Partida = partida; this.Partidas = new Partidas(); InstanceContext contextoPartida = new InstanceContext(Partidas); this.ClientePartida = new ServiceSYE.PartidaClient(contextoPartida); this.Mensajes = new Mensajes(); this.Mensajes.Espera = this; InstanceContext contextoChat = new InstanceContext(Mensajes); this.ClienteChat = new ServiceSYE.ChatClient(contextoChat); this.clienteJugador = new ServiceSYE.JugadorClient(); try { ClientePartida.UnirsePartida(jugador, partida.Nombre); ClienteChat.UnirseChat(jugador.NombreUsuario, partida.Nombre); ValidarConectado(); ClienteChat.EnviarMensaje("", partida.Nombre); } catch (CommunicationException) { EnviarMensajeError(); } }
/// <summary> /// Método que muestra la ventana de Espera. /// </summary> /// <param name="partida"> /// Objeto partida que se creó. /// </param> public void UnirseAPartida(ServiceSYE.Partida partida) { Espera espera = new Espera(jugador, partida); espera.Show(); cerrar = false; this.Close(); }
/// <summary> /// Envía un mensaje a los jugadores de quien es el siguiente jugador en tirar. Y cambia la posición de las imagenes de los bonus. /// </summary> private void SiguienteJugador() { if (PartidaEnJuego.Turno == PartidaEnJuego.JugadoresPartida.ElementAt(0).Value.Turno.NumeroTurno) { PartidaEnJuego = clientePartida.ObtenerPartida(PartidaEnJuego.Nombre); CargarBonus(); } if (PartidaEnJuego.Turno == Jugador.Turno.NumeroTurno) { clienteChat.EnviarMensajePartida("", PartidaEnJuego.Nombre, 1); } }
/// <summary> /// Calcula el movimiento que hará la ficha del jugador a una casilla en el tablero. /// </summary> /// <param name="numeroDado"> /// Número que obtuvo el jugador al tirar el dado. /// </param> /// <param name="jugadorMovimiento"> /// Objeto jugador que tiene los datos del jugador que realizó el tiro. /// </param> /// <param name="partidaJugando"> /// Objeto partida que tiene los datos de la partida en juego. /// </param> /// <returns> /// Valor entero de la casilla a la que se moverá la ficha del jugador. /// </returns> public int CalcularMovimiento(int numeroDado, Jugador jugadorMovimiento, ServiceSYE.Partida partidaJugando) { int movimiento; if (jugadorMovimiento.Turno.Casilla.Numero + numeroDado > 100) { movimiento = 100 - (jugadorMovimiento.Turno.Casilla.Numero + numeroDado - 100); } else { movimiento = jugadorMovimiento.Turno.Casilla.Numero + numeroDado; } jugadorMovimiento.Turno.Casilla = partidaJugando.Tablero.Casillas[movimiento - 1]; return(movimiento); }
/// <summary> /// Crea la partida. /// Si el jugador no tiene los puntos suficientes manda un mensaje de alerta. /// </summary> /// <param name="clientePartida"> /// Referencia al servidor. /// </param> private void CrearJuego(ServiceSYE.PartidaClient clientePartida) { if (jugador.Estadisticas.Puntos >= 200) { ServiceSYE.Partida partida = new ServiceSYE.Partida { Nombre = tb_NombrePartida.Text + "-" + jugador.NombreUsuario, Dificultad = cb_Dificultad.Text, Turno = 1, }; clientePartida.CrearPartida(partida); menuPrincipal.UnirseAPartida(partida); this.Close(); } else { MessageBox.Show(Properties.Resources.mb_PuntosInsuficientes, Properties.Resources.mb_Alerta); } }
/// <summary> /// Realiza el proceso para unir al jugador a una partida. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Bt_Unirse_Click(object sender, RoutedEventArgs e) { if (dg_Partidas.SelectedIndex >= 0) { if (jugador.Estadisticas.Puntos >= 200) { ServiceSYE.Partida partida = (ServiceSYE.Partida)dg_Partidas.SelectedItem; try { clientePartida.SalirVerPartidas(); menuPrincipal.UnirseAPartida(partida); this.Close(); } catch (CommunicationException) { MessageBox.Show(Properties.Resources.mb_ConexionServidor, Properties.Resources.mb_Alerta); } } else { MessageBox.Show(Properties.Resources.mb_PuntosInsuficientes, Properties.Resources.mb_Alerta); } } }
/// <summary> /// Calcula el movimiento que hará la ficha del jugador que tiro el bonus para los casos en los que: /// la posición de la casilla se divide /// la posición de la casilla se le resta 3 /// la posición de la casilla se le suma 10 /// </summary> /// <param name="bonus"> /// Valor entero que indica el bonus obtenido. /// </param> /// <param name="jugadorMovimiento"> /// Objecto jugador que tiene los datos del jugador que tiro el bonus. /// </param> /// <param name="partidaJugando"> /// Objeto partida que tiene los datos de la partida en juego. /// </param> /// <returns> /// Valor entero de la casilla a la que se moverá la ficha del jugador después del bonus. /// </returns> public int TiroBonus(int bonus, Jugador jugadorMovimiento, ServiceSYE.Partida partidaJugando) { int movimiento = 0; switch (bonus) { case 1: movimiento = jugadorMovimiento.Turno.Casilla.Numero / 2; break; case 2: movimiento = jugadorMovimiento.Turno.Casilla.Numero - 3; break; case 3: movimiento = jugadorMovimiento.Turno.Casilla.Numero + 10; break; } jugadorMovimiento.Turno.Casilla = partidaJugando.Tablero.Casillas[movimiento - 1]; return(movimiento); }
/// <summary> /// Realiza el proceso para determinar el movimiento de la ficha de un jugador si es que cayó en una serpiente o una escalera. /// </summary> /// <param name="jugadorMovimiento"> /// Objecto jugador que tiene los datos del jugador que cayó en una serpiente o escalera. /// </param> private void MoverFichaSerpienteOEscalera(ServiceSYE.Jugador jugadorMovimiento) { try { if (jugadorMovimiento.NombreUsuario.Equals(Jugador.NombreUsuario)) { Jugador.Turno.Casilla = PartidaEnJuego.Tablero.Casillas[jugadorMovimiento.Turno.Casilla.Numero + jugadorMovimiento.Turno.Casilla.Movimiento - 1]; clientePartida.MovimientoEspecial(PartidaEnJuego.Nombre, Jugador.Turno.Casilla.Numero); } DispatcherTimer temporizadorMovimiento = new DispatcherTimer(); temporizadorMovimiento.Interval = new TimeSpan(0, 0, 1); temporizadorMovimiento.Tick += (a, b) => { temporizadorMovimiento.Stop(); try { PartidaEnJuego = clientePartida.ObtenerPartida(PartidaEnJuego.Nombre); DeterminarMovimiento(jugadorMovimiento.NombreUsuario, ""); } catch (CommunicationException) { EnviarMensajeError(); } }; temporizadorMovimiento.Start(); } catch (CommunicationException) { EnviarMensajeError(); } }