// CONSTRUCTOR public Map(Param_Map parametre) { this.parametre = parametre; MapTexture = new Rectangle(0, 0, parametre.hauteur * 16, (parametre.largeur - 1) * 16); this.map_physique = new PhysicsEngine(parametre.liste, parametre.liste_projectile); this.liste_ia = new List<IA>(); if (parametre.texture_map == 3) { Player p1 = new Player(Keys.Up, Keys.Down, Keys.Left, Keys.Right, Keys.N, Keys.P, Keys.Enter, Keys.T, Ressources.Player1, parametre.x, parametre.y); Player p2 = new Player(Keys.Z, Keys.S, Keys.Q, Keys.D, Keys.A, Keys.E, Keys.R, Keys.W, Ressources.Player2, parametre.x, parametre.y); p1.bomb = 5; p2.bomb = 5; liste_joueurs.Add(p1); liste_joueurs.Add(p2); } else { this.liste_joueurs.Add(new Player(Keys.Up, Keys.Down, Keys.Left, Keys.Right, Keys.N, Keys.P, Keys.Enter, Keys.T, Ressources.Player1, parametre.x, parametre.y)); } //HEALTH + AMMO BOXES this.liste_box = new List<Items>(); this.liste_box2 = new List<Items>(); //EXPLOSIVE BOXES this.liste_barrel = new List<DestructibleItems>(); this.liste_barrel = parametre.liste_barrel; //EXPLOSION PARTICULE this.liste_explosions = new List<ParticuleExplosion>(); this.liste_explosions2 = new List<ParticuleExplosion>(); this.liste_explosions3 = new List<ParticuleExplosion>(); this.explosionTexture = Ressources.ExplosionParticule; //BLOOD PARTICULE this.liste_blood = new List<ParticuleExplosion>(); this.liste_blood2 = new List<ParticuleExplosion>(); //TURRETS this.liste_turret = new List<Turret>(); this.liste_turret2 = new List<Turret>(); //RAIN (que sur la map01) this.liste_rain = new List<ParticuleRain>(); this.rainTexture = Ressources.mRain; this.spawns = parametre.liste_spawn; this.spawn_items = parametre.liste_caisses; this.liste_clavier = new List<Keys>(); this.liste_clavier_2 = new List<Keys>(); fin_niveau = parametre.checkpointArrivee; boss_entry = parametre.checkpointBossEntry; //Client.initialisationClient(4242); //Serveur.intialisationServeur(1338); }
public void pathfing_vol(ref string action, Player joueur) { if (ia.compteur_path % 30 == 0) { ia.compteur_path = 0; Random rand = new Random(); ia.ia_dir = rand.Next(0, 2); } ia.compteur_path++; if (ia.ia_dir == 0) { if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { action = "up"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { action = ""; } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = "up"; if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { action = ""; } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { action = "up"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } } else { if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { action = "up"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.X < this.ia.IATexture.X) { action = "left"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas()))) { } else { if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { action = "up"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { action = ""; } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } else if (joueur.PlayerTexture.X > this.ia.IATexture.X) { action = "right"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = "up"; if (joueur.PlayerTexture.Y < this.ia.IATexture.Y) { if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_haut()))) { } else { action = ""; } } else if (joueur.PlayerTexture.Y > this.ia.IATexture.Y) { action = "down"; if (!(map_physique.mur_projectile(this.ia.futur_position_X_gauche(), this.ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(this.ia.futur_position_X_droite(), this.ia.futur_position_Y_bas()))) { } else { action = ""; } } } } } }
public void update_player(KeyboardState keyboard, MouseState mouse) { // Update l'objet joueur contenu par la map foreach (Player joueur in liste_joueurs) { joueur.Update(mouse, keyboard, liste_clavier); joueur.action_hero(map_physique, liste_ia, liste_barrel); if (joueur.Health > 0) { liste_joueurs2.Add(joueur); } else { if (parametre.texture_map == 3) { Player joueur_ = new Player(joueur.Haut, joueur.Bas, joueur.Gauche, joueur.Droite, joueur.Tire, joueur.PoserBomb, joueur.ActiverBomb, joueur.PoserTurret, joueur.texture, parametre.x, parametre.y); joueur_.bomb = 5; liste_joueurs2.Add(joueur_); } } } liste_joueurs = liste_joueurs2; liste_joueurs2 = new List<Player>(); if (keyboard.IsKeyDown(Keys.D1) && !etape1 && parametre.texture_map != 3) { etape1 = true; } if (keyboard.IsKeyDown(Keys.D2) && !etape2 && parametre.texture_map != 3) { etape2 = true; this.liste_joueurs.Add(new Player(Keys.Z, Keys.S, Keys.Q, Keys.D, Keys.A, Keys.E, Keys.R, Keys.W, Ressources.Player2, parametre.x, parametre.y));/* this.liste_joueurs.Add(new Player(Keys.NumPad8, Keys.NumPad5, Keys.NumPad4, Keys.NumPad6, Keys.NumPad7, Ressources.Player3));*/ } if (keyboard.IsKeyDown(Keys.D3) && !etape3 && parametre.texture_map != 3) { etape3 = true; } if (liste_joueurs.Count == 0) //Si il n'y a plus de joueurs { game_over = true; } }
//Gère le raffraichissement de la liste d'IA public void update_ia() { foreach (IA ia in liste_ia) //Pour chaque IA de la liste { if (ia.Health > 0) { ia.est_update = true; //Précise que l'on travaille sur la liste this.ia = ia; float distance = 10000; Vector2 vector_ia = new Vector2(ia.IATexture.X, ia.IATexture.Y); Player joueur_cible = new Player(Keys.Up, Keys.Down, Keys.Right, Keys.Left, Keys.S, Keys.P, Keys.Enter, Keys.T, Ressources.Player1, parametre.x, parametre.y); Vector2 vector_joueur = new Vector2(); foreach (Player joueur in liste_joueurs) { joueur_cible = joueur; vector_joueur = new Vector2(joueur_cible.PlayerTexture.X, joueur_cible.PlayerTexture.Y); } Vector2.Distance(ref vector_ia, ref vector_joueur, out distance); foreach (Player joueur in liste_joueurs) { vector_joueur = new Vector2(joueur.PlayerTexture.X, joueur.PlayerTexture.Y); float distance_2; Vector2.Distance(ref vector_ia, ref vector_joueur, out distance_2); if (distance_2 < distance) { distance = distance_2; joueur_cible = joueur; } } //L'ensemble des commandes précédentes définissent quel héros est la cible, ici le plus proche /* Node départ = new Node(); départ.x = (this.ia.IATexture.X + 8) / 16; départ.y = (this.ia.IATexture.Y + 8) / 16; Node arrivée = new Node(); arrivée.x = (joueur_cible.PlayerTexture.X + 8) / 16; arrivée.y = (joueur_cible.PlayerTexture.Y + 8) / 16; bool[,] map = map_physique.map();*/ /* this.ia.action = Pathfinding.pathfind(map, départ, arrivée); */ if (ia.ia_vol) { pathfing_vol(ref this.ia.action, joueur_cible); } else { pathfing(ref this.ia.action, joueur_cible); } //Trouve quelle action va faire l'IA ia.action_ia(ia, joueur_cible, liste_barrel, map_physique, liste_ia, liste_joueurs); //Verifie la possibilité de réalisation des actions ia.Update(); //Met à jour l'IA ia.attaque_ia(liste_joueurs); ia.est_update = false; //Désactive l'update de l'IA } else { ia.en_vie = false; //Tue l'IA compteur_kill++; AddBloodEffect(new Vector2(ia.IATexture.X, ia.IATexture.Y), ia.IATexture.X, ia.IATexture.Y, 1); moteur_son.PlayBloodEffect(); } } if (compteur > 180 && etape1) //Ajout de nouvelles IA a la map { int choix = rand0.Next(spawns.Count); Spawn spawn = spawns.ElementAt(choix); choix = rand0.Next(spawn.créatures.Count); IA ia = spawn.créatures.ElementAt(choix); IA ia_ = new IA(ia.IATexture.X, ia.IATexture.Y, ia.id_son, ia.id_texture, ia.Health, ia.Damage); float distance = 10000; Vector2 vector_ia = new Vector2(ia_.IATexture.X, ia_.IATexture.Y); Player joueur_cible = new Player(Keys.Up, Keys.Down, Keys.Right, Keys.Left, Keys.S, Keys.P, Keys.Enter, Keys.T, Ressources.Player1, parametre.x, parametre.y); Vector2 vector_joueur = new Vector2(); foreach (Player joueur in liste_joueurs) { joueur_cible = joueur; vector_joueur = new Vector2(joueur_cible.PlayerTexture.X, joueur_cible.PlayerTexture.Y); } Vector2.Distance(ref vector_ia, ref vector_joueur, out distance); foreach (Player joueur in liste_joueurs) { vector_joueur = new Vector2(joueur.PlayerTexture.X, joueur.PlayerTexture.Y); float distance_2; Vector2.Distance(ref vector_ia, ref vector_joueur, out distance_2); if (distance_2 < distance) { distance = distance_2; } } if (distance < 400) { bool test = true; foreach (IA ia__ in liste_ia) { if (ia__.IATexture.Intersects(ia_.IATexture)) { test = false; } else { } } if (test) { liste_ia.Add(ia_); if (true) { moteur_son.PlayPika(ia_.id_son); } joue_son = !joue_son; compteur = 0; } } } compteur = compteur + 1; liste_ia2 = new List<IA>(); //Recopie la liste d'IA encore en vie dans une nouvelle liste foreach (IA ia in liste_ia) { if (ia.en_vie) liste_ia2.Add(ia); } liste_ia = liste_ia2; //Vide la liste secondaire dans la premiere }
public void action_ia(IA ia, Player joueur, List<DestructibleItems> liste_barrel, PhysicsEngine map_physique, List<IA> liste_ia, List<Player> liste_joueur) { foreach (DestructibleItems barrel in liste_barrel) { if (barrel.Aire_barrel.Intersects(ia.rectangle()) && barrel.type == "barrel") { ia.actionIA = ""; } } if (ia.actionIA == "up" || ia.actionIA == "down" || ia.actionIA == "left" || ia.actionIA == "right") { if (!ia.ia_vol) { if (ia.actionIA == "up") { if (!(map_physique.mur(ia.futur_position_X_gauche(), ia.futur_position_Y_haut())) && !(map_physique.mur(ia.futur_position_X_droite(), ia.futur_position_Y_haut())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "down") { if (!(map_physique.mur(ia.futur_position_X_gauche(), ia.futur_position_Y_bas())) && !(map_physique.mur(ia.futur_position_X_droite(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "left") { if (!(map_physique.mur(ia.futur_position_X_gauche(), ia.futur_position_Y_haut())) && !(map_physique.mur(ia.futur_position_X_gauche(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "right") { if (!(map_physique.mur(ia.futur_position_X_droite(), ia.futur_position_Y_haut())) && !(map_physique.mur(ia.futur_position_X_droite(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } } else { if (ia.actionIA == "up") { if (!(map_physique.mur_projectile(ia.futur_position_X_gauche(), ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(ia.futur_position_X_droite(), ia.futur_position_Y_haut())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "down") { if (!(map_physique.mur_projectile(ia.futur_position_X_gauche(), ia.futur_position_Y_bas())) && !(map_physique.mur_projectile(ia.futur_position_X_droite(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "left") { if (!(map_physique.mur_projectile(ia.futur_position_X_gauche(), ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(ia.futur_position_X_gauche(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } if (ia.actionIA == "right") { if (!(map_physique.mur_projectile(ia.futur_position_X_droite(), ia.futur_position_Y_haut())) && !(map_physique.mur_projectile(ia.futur_position_X_droite(), ia.futur_position_Y_bas())) && collision_entite_ia(ia, liste_ia, liste_joueur)) ia.mise_a_jour(ia.actionIA); else ia.actionIA = ""; } } } ia.actionIA = ""; //"Remet à zéros" les actions de l'IA }
// METHODS private void utilisation(Player joueur) { if (type == "health" && joueur.Health < 100) { joueur.Health = joueur.Health + this.healPoints; isVisible = false; if (joueur.Health > 100) { joueur.Health = 100; } } else if (type == "ammo" && (joueur.Ammo < 100 || joueur.bomb <= 0)) { joueur.Ammo = joueur.Ammo + this.ammoNumber; isVisible = false; if (joueur.Ammo > 100) { joueur.Ammo = 100; } if (joueur.bomb <= 0) { joueur.bomb++; } } else { } }