private void Jugar(string obj) { try { if (cliente != null)//soy cliente { SeleccionJugador2 = (Opcion)Enum.Parse(typeof(Opcion), obj); int c = AsignarColumna(SeleccionJugador2); Ficha f = RevisarEspaciosBlancos(c); f.Color = (int)TipoFicha.FICHA_ROJA; EnviarComando(new DatoEnviado { Comando = Comando.JugadaEnviada, DatoJugada = SeleccionJugador2 }); } else //soy servidor { SeleccionJugador1 = (Opcion)Enum.Parse(typeof(Opcion), obj); int c = AsignarColumna(SeleccionJugador1); Ficha f = RevisarEspaciosBlancos(c); f.Color = (int)TipoFicha.FICHA_AMARILLA; EnviarComando(new DatoEnviado { Comando = Comando.JugadaEnviada, DatoJugada = SeleccionJugador1 }); } PuedeJugar = false; CambiarMensaje("Esperando la jugada del adversario"); _ = VerificarGanadorAsync(); } catch (Exception) { MessageBox.Show("La columna donde quiere colocar la ficha esta llena"); } }
public bool RevisarColor(Ficha f1, Ficha f2, Ficha f3, Ficha f4, TipoFicha tipo) { if (f1 != null && f2 != null && f3 != null && f4 != null) { return(((int)tipo == f1.Color) && ((int)tipo == f2.Color) && ((int)tipo == f3.Color) && ((int)tipo == f4.Color)); } return(false); }
public Ficha RevisarEspaciosBlancos(int columna) { Ficha f = null; for (int r = renglones - 1; r >= 0; r--) { if (TomarFicha(r, columna).Color == (int)TipoFicha.FICHA_VACIA) { f = TomarFicha(r, columna); break; } } return(f); }
//Ventana juego prepara para empezar a jugar private async void RecibirComando() { try { byte[] buffer = new byte[1024]; while (webSocket.State == WebSocketState.Open) { var result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { juego.Close(); return; } string datosRecibidos = Encoding.UTF8.GetString(buffer, 0, result.Count); var comando = JsonConvert.DeserializeObject <DatoEnviado>(datosRecibidos); if (cliente != null) //Soy cliente { switch (comando.Comando) { case Comando.NombreEnviado: Jugador1 = (string)comando.DatoJugada; CambiarMensaje("Conectado con el jugador " + Jugador1); //Esto es antes de abrir la ventana del juego _ = currentDispatcher.BeginInvoke(new Action(() => { EnviarComando(new DatoEnviado { Comando = Comando.NombreEnviado, DatoJugada = Jugador2 }); lobby.Hide(); juego = new VentanaJuego(); juego.Title = "CLIENTE"; juego.DataContext = this; PrepararTablero(); CambiarMensaje("Seleccione la opción con la cual quiera jugar"); juego.ShowDialog(); lobby.Show(); })); break; //Estos son los datos case Comando.JugadaEnviada: currentDispatcher.Invoke(new Action(() => { SeleccionJugador1 = (Opcion)(long)comando.DatoJugada; int c = AsignarColumna(SeleccionJugador1); Ficha f = RevisarEspaciosBlancos(c); f.Color = (int)TipoFicha.FICHA_AMARILLA; CambiarMensaje("El adversario ha seleccionado su jugada."); PuedeJugar = true; })); _ = VerificarGanadorAsync(); break; } } else //Soy servidor { switch (comando.Comando) { case Comando.NombreEnviado: Jugador2 = (string)comando.DatoJugada; CambiarMensaje("Conectado con el jugador " + Jugador2); //Esto es antes dee abrir la ventana del juego y para abrirla _ = currentDispatcher.BeginInvoke(new Action(() => { lobby.Hide(); VentanaJuego juego = new VentanaJuego(); juego.Title = "SERVIDOR"; juego.DataContext = this; PrepararTablero(); CambiarMensaje("Seleccione la opción con la cual quiera jugar"); puedeJugar = true; juego.ShowDialog(); lobby.Show(); })); break; case Comando.JugadaEnviada: currentDispatcher.Invoke(new Action(() => { SeleccionJugador2 = (Opcion)(long)comando.DatoJugada; int c = AsignarColumna(SeleccionJugador2); Ficha f = RevisarEspaciosBlancos(c); f.Color = (int)TipoFicha.FICHA_ROJA; CambiarMensaje("El adversario ha seleccionado su jugada."); PuedeJugar = true; })); _ = VerificarGanadorAsync(); break; } } } } catch (Exception ex) { if (webSocket.State == WebSocketState.Aborted) { juego.Close(); lobby.Close(); MainWindowVisible = true; Actualizar("MainWindowVisible"); } else { CambiarMensaje(ex.Message); } } }