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; }
public PowerUpMessage(MessageType msgType, PowerUp powerUp) : base(msgType) { this.powerUp = powerUp; }
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; } } }