示例#1
0
 private static PowerUp gerarPowerupIndividual(ContentManager Content)
 {
     PowerUp powerup = new PowerUp();
     tipo_PowerUp tipo = tipo_PowerUp.double_shot;
     int n_powerup = gerador_numeros.Next(5);
     if (n_powerup == 0) tipo = tipo_PowerUp.double_shot;
     if (n_powerup == 1) tipo = tipo_PowerUp.double_turn;
     if (n_powerup == 2) tipo = tipo_PowerUp.mega_power;
     if (n_powerup == 3) tipo = tipo_PowerUp.sniper;
     if (n_powerup == 4) tipo = tipo_PowerUp.vida;
     Vector2 posicao_grelha = gerarPosicaoGrelhaPowerup();
     Vector2 posicao = new Vector2((grelha[(int)posicao_grelha.X, (int)posicao_grelha.Y].posicao.X) + (textura_terreno.Width * Terreno.escala / 2) - textura_tanque1.Width * Tank.escala + 3, (grelha[(int)posicao_grelha.X, (int)posicao_grelha.Y].posicao.Y));
     powerup.Initializing(tipo, posicao, posicao_grelha, Content, 5);
     return powerup;
 }
示例#2
0
 public PowerUpMessage(MessageType msgType, PowerUp powerUp)
     : base(msgType)
 {
     this.powerUp = powerUp;
 }
示例#3
0
        private void ProcessServerMessage(object obj)
        {
            string json = (string)obj;
            Console.WriteLine(json);

            List<Message> listaMensagens = new List<Message>();

            JsonTextReader reader = new JsonTextReader(new StringReader(json));
            reader.SupportMultipleContent = true;
            while (true)
            {
                if (!reader.Read())
                {
                    break;
                }

                JsonSerializer serializer = new JsonSerializer();
                JObject jsonObj = serializer.Deserialize<JObject>(reader);
                int intMsgType = (int)jsonObj["msgType"];
                MessageType msgType = (MessageType)intMsgType;

                switch (msgType)
                {
                    case MessageType.Control:
                        ControlMessage ctrlMessage = JsonConvert.DeserializeObject<ControlMessage>(jsonObj.ToString());
                        listaMensagens.Add(ctrlMessage);
                        break;
                    case MessageType.Move:
                        GameMoveMessage moveMessage = JsonConvert.DeserializeObject<GameMoveMessage>(jsonObj.ToString());
                        listaMensagens.Add(moveMessage);
                        break;
                    case MessageType.Attack:
                        GameAttackMessage attackMessage = JsonConvert.DeserializeObject<GameAttackMessage>(jsonObj.ToString());
                        listaMensagens.Add(attackMessage);
                        break;
                    case MessageType.PowerUpList:
                        PowerUpListMessage powerUpListMessage = JsonConvert.DeserializeObject<PowerUpListMessage>(jsonObj.ToString());
                        listaMensagens.Add(powerUpListMessage);
                        break;
                    case MessageType.PowerUp:
                        PowerUpMessage powerUpMessage = JsonConvert.DeserializeObject<PowerUpMessage>(jsonObj.ToString());
                        listaMensagens.Add(powerUpMessage);
                        break;
                    case MessageType.TankList:
                        TankListMessage tankListMessage = JsonConvert.DeserializeObject<TankListMessage>(jsonObj.ToString());
                        listaMensagens.Add(tankListMessage);
                        break;
                    default:
                        break;
                }
            }

            listaMensagens.OrderBy(x => x.msgNumber);
            foreach (Message msg in listaMensagens)
            {

                Console.WriteLine("msgType: " + msg.msgType);

                switch (msg.msgType)
                {
                    case MessageType.Control:
                        ControlMessage ctrlMessage = (ControlMessage)msg;
                        Console.WriteLine(ctrlMessage.msgNumber + ": Control message: "+ ctrlMessage.command.ToString());

                        switch (ctrlMessage.command)
                        {
                            case ControlCommand.TeamAlliance:
                                equipaJogador = Team.Alliance;
                                statusBox.Initializing(equipaJogador, 0, 0, "Team Alliance", true, false);
                                break;
                            case ControlCommand.TeamCoalition:
                                equipaJogador = Team.Coalition;
                                statusBox.Initializing(equipaJogador, 0, 0, "Team Coalition", true, false);
                                break;
                            case ControlCommand.Lobby:
                                statusBox.Initializing(equipaJogador, 0, 0, "Waiting for player 2..", false, true);
                                break;
                            case ControlCommand.StartGameYourTurn:
                                turnBox.Initializing(equipaJogador, numeroTanquesActivosEquipa(lista_tanques, equipaJogador), numeroTanquesProntosEquipa(lista_tanques, equipaJogador), false, false);
                                equipaTurno = equipaJogador;
                                //Começamos nós a jogar, criamos a lista de powerups e enviamos para o servidor
                                lista_powerups.Clear();
                                gerarPowerUps();
                                ReporJogo();
                                SendMessageToServer(new PowerUpListMessage(MessageType.PowerUpList, lista_powerups));
                                //Enviamos também para o servidor uma lista de tuplos, em que cada tuplo contém:
                                // 1 - (Team) Equipa
                                // 2 - (int) ID do tanque
                                // 3 - (int) Power do tanque
                                // 4 - (int) Vida do tanque
                                List<Tuple<Team, int, int, int>> listaPowersEVida = new List<Tuple<Team, int, int, int>>();
                                foreach (Tank tanque in lista_tanques)
                                {
                                    listaPowersEVida.Add(new Tuple<Team, int, int, int>(tanque.equipa, tanque.ID, tanque.power, tanque.vida));
                                }
                                SendMessageToServer(new TankListMessage(MessageType.TankList, listaPowersEVida));
                                break;
                            case ControlCommand.StartGameAdversaryTurn:
                                equipaTurno = GetAdversario();
                                ReporJogo();
                                statusBox.Initializing(equipaJogador, 0, 0, "Player 2 turn..", true, false);
                                break;
                            case ControlCommand.YourTurn:
                                executarActualizacaoJogadas(Content, equipaJogador);
                                break;
                            case ControlCommand.AdversaryTurn:
                                Team equipaAJogar;
                                if (equipaJogador == Team.Alliance)
                                {
                                    equipaAJogar = Team.Coalition;
                                }
                                else
                                {
                                    equipaAJogar = Team.Alliance;
                                }
                                executarActualizacaoJogadas(Content, equipaAJogar);
                                break;
                            case ControlCommand.GameEndYouWin:
                                turnBox.Initializing(equipaJogador, numeroTanquesActivosEquipa(lista_tanques, equipaJogador), numeroTanquesProntosEquipa(lista_tanques, equipaJogador), true, false);
                                break;
                            case ControlCommand.GameEndAdversaryWins:
                                turnBox.Initializing(equipaJogador, numeroTanquesActivosEquipa(lista_tanques, equipaJogador), numeroTanquesProntosEquipa(lista_tanques, equipaJogador), true, true);
                                break;
                            case ControlCommand.AdversaryQuit:
                                statusBox.Initializing(equipaJogador, 0, 0, "Adversary quit!", false, true);
                                break;
                            default:
                                break;
                        }
                        break;

                    case MessageType.Move:
                        //O adversário moveu um tanque
                        GameMoveMessage moveMessage = (GameMoveMessage)msg;
                        Tank tanqueMovido = GetTankFromIDAndTeam(moveMessage.tankID, false);
                        if (tanqueMovido != null)
                        {
                            MoverTanqueNetwork(moveMessage, tanqueMovido);
                        }
                        break;
                    case MessageType.Attack:
                        GameAttackMessage attackMessage = (GameAttackMessage)msg;
                        atacarTanqueNetwork(attackMessage);
                        break;
                    case MessageType.PowerUpList:
                        //A lista de powerUps foi gerada pelo adversário e está-nos a ser enviada pelo servidor
                        PowerUpListMessage powerUpListMessage = (PowerUpListMessage)msg;
                        lista_powerups.Clear();
                        foreach (PowerUp power in powerUpListMessage.listaPowerUps)
                        {
                            PowerUp powerup = new PowerUp();
                            Vector2 posicao_grelha = power.posicao_grelha;
                            Vector2 posicao = new Vector2((grelha[(int)posicao_grelha.X, (int)posicao_grelha.Y].posicao.X) + (textura_terreno.Width * Terreno.escala / 2) - textura_tanque1.Width * Tank.escala + 3, (grelha[(int)posicao_grelha.X, (int)posicao_grelha.Y].posicao.Y));
                            powerup.Initializing(power.tipo, posicao, posicao_grelha, Content, power.duracao);
                            lista_powerups.Add(powerup);
                        }
                        break;
                    case MessageType.PowerUp:
                        //O adversário apanhou um powerUp, gerou um novo e estamos a recebê-lo
                        PowerUpMessage powerUpMessage = (PowerUpMessage)msg;
                        PowerUp powerUp = new PowerUp();
                        Vector2 posicao_grelhaPowerUp = powerUpMessage.powerUp.posicao_grelha;
                        Vector2 posicaoPowerUp = new Vector2((grelha[(int)posicao_grelhaPowerUp.X, (int)posicao_grelhaPowerUp.Y].posicao.X) + (textura_terreno.Width * Terreno.escala / 2) - textura_tanque1.Width * Tank.escala + 3, (grelha[(int)posicao_grelhaPowerUp.X, (int)posicao_grelhaPowerUp.Y].posicao.Y));
                        powerUp.Initializing(powerUpMessage.powerUp.tipo, posicaoPowerUp, posicao_grelhaPowerUp, Content, powerUpMessage.powerUp.duracao);
                        lista_powerups.Add(powerUp);
                        break;
                    case MessageType.TankList:
                        //O adversário gerou a sua lista de tanques e envia-nos a vida e power de cada tanque
                        TankListMessage tankListMessage = (TankListMessage)msg;
                        foreach (Tuple<Team, int, int, int> tuple in tankListMessage.listaPowersEVida)
                        {
                            Tank tanque = lista_tanques.Find(t => t.equipa == tuple.Item1 && t.ID == tuple.Item2);
                            tanque.power = tuple.Item3;
                            tanque.vida = tuple.Item4;
                        }
                        break;
                    default:
                        break;
                }
            }
        }