示例#1
0
        /// <summary>
        /// Envia datos a un cliente
        /// </summary>
        public void EnviarComando(ushort comando, string texto, ClienteTCP cliente)
        {
            if (Clientes.ContainsKey(cliente))
            {
                Cliente jugador = Clientes[cliente];

                string[] nombres = Enum.GetNames(typeof(ConsoleColor));
                Console.BackgroundColor =
                    (ConsoleColor)
                    Enum.Parse(typeof(ConsoleColor), nombres[jugador.GetHashCode() % (nombres.Length - 1)]);
                Console.WriteLine("Servidor->" + jugador.Nombre + ": " + comando + " " + texto);
                Console.ResetColor();
            }
            else
            {
                Console.WriteLine("Servidor->Cliente: " + comando + " " + texto);
            }

            cliente.EnviarComando(comando, texto);
        }
示例#2
0
        void ComandoRecibido(ushort comando, string[] parametros, string cadena, ClienteTCP clienteTcp)
        {
            if (cerrando)
            {
                return;
            }
            switch (comando)
            {
            case 2:     //Ping
                clienteTcp.EnviarComando(3, "PING OK");
                break;

            case 51:     //Inicio de ronda
                numeroRondaActual = int.Parse(parametros[0]);
                mapa.RondaActual  = numeroRondaActual;
                rondaActual.Text  = "Ronda " + numeroRondaActual;
                Informacion("Inicio de la ronda " + numeroRondaActual);
                mapa.Refresh();
                break;

            case 52:     //Inicio de turno de jugador
                Informacion("Turno del jugador " + parametros[0]);
                rondaActual.Text = "Ronda " + numeroRondaActual;

                lblTurno.ForeColor = Color.FromArgb(int.Parse(parametros[1]));
                peticion.Left      = lblTurno.Right + 5;
                clienteActual      = null;

                lblTurno.Text = "Turno de " + parametros[0];
                //Comprobar si hay tiempo limite
                if (parametros.Length > 2)
                {
                    TiempoRestante = int.Parse(parametros[2]);
                    timer1.Enabled = true;
                }

                foreach (Cliente jugador in Clientes)
                {
                    if (string.Compare(jugador.Nombre, parametros[0], true) == 0)
                    {
                        clienteActual      = jugador;
                        mapa.JugadorActual = clienteActual;

                        if (alarmaAlInicioDelTurnoDelJugadorToolStripMenuItem.Checked)
                        {
                            ReproducirAlarma();
                        }

                        toolStrip2.Enabled       = true;
                        toolStripButton6.Enabled = true;
                        toolStripButton4.Enabled = true;

                        listaJugadores.Items.Remove(clienteActual);
                        if (listaJugadores.SelectedIndex == -1)
                        {
                            listaJugadores.SelectedIndex = 0;
                        }

                        bFinTurno.Visible = true;
                        jugador.ClienteTcp.EnviarComando(53, "Comando de inicio de turno recibido");
                        this.Invoke(new EventHandler(EnviarFlota), new object[] { null, null });     //Enviar ataque
                        break;
                    }
                }
                if (clienteActual == null)
                {
                    HerramientaCancelada();
                    peticion.Text = "Esperando a que acabe su turno....";
                    clienteActual = null;

                    toolStrip2.Enabled = true;
                    if (Clientes.Count == 1)
                    {
                        toolStripButton6.Enabled = false;
                    }
                    else
                    {
                        toolStripButton6.Enabled = false;
                        toolStripButton4.Enabled = false;
                    }
                    bFinTurno.Visible  = false;
                    mapa.JugadorActual = null;
                }
                break;

            case 204:     //Fin de tiempo de turno
                bFinTurno.PerformClick();
                break;

            case 60:     //Fin de partida
                Informacion("El jugador " + parametros[0] + " ha ganadao la partida", true);

                try
                {
                    lblTurno.Text      = "¡El jugador " + parametros[0] + " ha ganadao la partida!";
                    lblTurno.ForeColor = mapa.BuscarJugador(parametros[0]).Color;
                    peticion.Text      = string.Empty;
                    CancelarHerramienta(null, null);
                }
                catch
                {
                }
                if (Clientes != null && Clientes.Count > 0)
                {
                    Clientes[0].ClienteTcp.EnviarComando(302, "Salir del servidor");
                }

                break;

            case 61:     //Jugador eliminado

                Informacion("El jugador " + parametros[0] + " ha sido eliminado", true);
                Cliente eliminado = mapa.BuscarJugador(parametros[0]);
                if (eliminado != null)
                {
                    eliminado.Derrotado = true;
                }

                break;

            case 62:     //Jugador sin planetas
                Informacion("El jugador " + parametros[0] + " no tiene ningún planeta conquistado");
                Cliente sinplanetas = mapa.BuscarJugador(parametros[0]);
                if (sinplanetas != null)
                {
                    sinplanetas.PoseePlaneta = false;
                }

                break;

            case 70:     //Llegada de flota
                Informacion(string.Format("Han llegado {0} naves de refuerzo al planeta {1}", parametros[1],
                                          parametros[0]));
                break;

            case 72:     //Jugador retirado
                Informacion(
                    string.Format(
                        "El jugador {0} se ha retirado de la partida. Al final del turno sus planetas serán neutrales.",
                        parametros[0]), true);
                break;

            case 71:     //Batalla
                Batalla.ResultadoBatalla resultado = (Batalla.ResultadoBatalla) int.Parse(parametros[3]);

                string dueño = parametros[2] == string.Empty ? "Neutral" : parametros[2];
                if (resultado == Batalla.ResultadoBatalla.GanaAtacante)
                {
                    Informacion(
                        string.Format(
                            "El planeta {0} ({1}) ha caído ante una flota de {2} naves del jugador {3}. Han sobrevivido {4} naves."
                            , parametros[0], dueño, parametros[4], parametros[1], parametros[6]), true);
                }
                else if (resultado == Batalla.ResultadoBatalla.GanaDefensor)
                {
                    string texto =
                        string.Format(
                            "El planeta {0} ({1}) se ha defendido con {4} naves de un ataque de {3} naves del jugador {2}."
                            , parametros[0], dueño, parametros[1], parametros[4], parametros[5]);
                    if (parametros[2] != string.Empty)     //No es neutral
                    {
                        texto += " Han sobrevivido " + parametros[7] + " naves.";
                    }
                    Informacion(texto, true);
                }
                else     //Empate
                {
                    Informacion(
                        string.Format(
                            "La batalla en el planeta {0} entre {1} naves del jugador {2} y {3} naves del jugador {4} ha terminado en empate. Han sobrevivido {5} naves del atacante y {6} del defensor."
                            , parametros[0], parametros[4], parametros[1], parametros[5], dueño, parametros[6],
                            parametros[7]), true);
                }
                break;

            case 206:     //Actualizacion de datos
                mapa.CargarDatos(parametros);
                break;

            case 210:     //Cargar partida
                mapa.Inicializar(int.Parse(parametros[0]), mapa.Jugadores, int.Parse(parametros[1]));
                Informacion("El administrador ha cargado una nueva partida", true);
                break;

            case 401:     //Chat de administrador
                ListViewItem item = new ListViewItem();
                item.Text = "Administrador";
                item.SubItems.Add(parametros[0]);
                item.Font      = new Font(item.Font, FontStyle.Bold);
                item.ForeColor = Color.Black;
                listaChat.Items.Add(item);

                item.EnsureVisible();

                if (alarmaAlRecibirMensajeDeChatToolStripMenuItem.Checked)
                {
                    MensajeNuevo();
                }
                break;

            case 402:     //Chat de jugador

                ListViewItem itemChat = new ListViewItem();
                itemChat.Text = parametros[0];
                itemChat.SubItems.Add(parametros[1]);
                foreach (Cliente jugador in mapa.Jugadores)
                {
                    if (jugador.Nombre == parametros[0])
                    {
                        itemChat.ForeColor = jugador.Color;
                        break;
                    }
                }
                listaChat.Items.Add(itemChat);

                itemChat.EnsureVisible();

                if (alarmaAlRecibirMensajeDeChatToolStripMenuItem.Checked)
                {
                    MensajeNuevo();
                }

                break;
            }
        }
示例#3
0
 /// <summary>
 /// Conecta con el servidor
 /// </summary>
 public void Conectar(int IdCliente, string versionCliente)
 {
     ClienteTcp.EnviarComando(10, string.Format("Hola, mi ID de cliente es '{0}' y la versión es '{1}'. Mi nombres es '{2}', mi color es '{3}'",
                                                IdCliente, versionCliente, Nombre, Color.ToArgb()));
 }