예제 #1
0
        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");
            }
        }
예제 #2
0
 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);
 }
예제 #3
0
        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);
        }
예제 #4
0
        //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);
                }
            }
        }