Пример #1
0
 /// <summary>
 /// Fonction dont le rôle est de faire jouer le son d'explosion de l'ennemi
 /// et de préparer le visuel de celle-ci
 /// </summary>
 /// <param name="gw"></param>
 public void PlayDeath(GW gw)
 {
     //Jouer l'effet sonore
     explodeMusic.Play();
     //Effet visuel de destruction
     for (int i = 0; i < 360; i++)
     {
         gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(enemyColor.R, enemyColor.G, enemyColor.B,
                                                                          (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.75f, i));
     }
 }
Пример #2
0
 /// <summary>
 /// Méthode dont le rôle est de mettre à jour le projectile et de dire au jeu s'il
 /// peut supprimer le projectile ou non
 /// </summary>
 /// <param name="deltaT">La vitesse de rafraichissement du jeu</param>
 /// <param name="gw">Instance représentant le jeu</param>
 /// <returns>Booléen indiquant si le projectile peut être détruit(FALSE) ou non(TRUE)</returns>
 public bool Update(Single deltaT, GW gw)
 {
     //Si le projectile sort de la limite du jeu, alors retirer celui-ci du jeu
     if (gw.Contains(this) == false)
     {
         return(false);
     }
     //Sinon, on ajoute de nouvelles particules tout en le faisant avancer.
     else
     {
         gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(color.R, color.G, color.B,
                                                                          (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.55f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1)));
         Advance(ProjectileSpeed);
         return(true);
     }
 }
Пример #3
0
 /// <summary>
 /// Fonction dont le rôle est d'interprêter les commandes entrées par l'utilisateur et
 /// de mettre le joueur à jour en fonction de celles-cis. Le visuel et du joueur et la
 /// validation du booléen "isAlive" reposent aussi sur cette fonction.
 /// </summary>
 /// <param name="deltaT">Vitesse de rafraichissement du jeu</param>
 /// <param name="gw">Représente l'instance du jeu</param>
 /// <returns>Booléen indiquant si le joueur est en vie(TRUE) ou non(FALSE)</returns>
 public bool Update(Single deltaT, GW gw)
 {
     //Initialisation de l'effet de particule
     gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(HeroColor.R, HeroColor.G, HeroColor.B,
                                                                      (byte)rnd.Next(25, 255 + 1)), 5.35f, 1.25f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1)));
     //Passif
     if (gw.PlayerIdle)
     {
         Advance(2);
     }
     //Accélération
     if (Keyboard.IsKeyPressed(Keyboard.Key.Up) || Keyboard.IsKeyPressed(Keyboard.Key.W))
     {
         Advance(4.50f);
     }
     //Reculons
     if (Keyboard.IsKeyPressed(Keyboard.Key.Down) || Keyboard.IsKeyPressed(Keyboard.Key.S))
     {
         Advance(-4.50f);
     }
     //Rotation anti-horaire
     if (Keyboard.IsKeyPressed(Keyboard.Key.Left) || Keyboard.IsKeyPressed(Keyboard.Key.A))
     {
         Rotate(-4.50f);
     }
     //Rotation horaire
     if (Keyboard.IsKeyPressed(Keyboard.Key.Right) || Keyboard.IsKeyPressed(Keyboard.Key.D))
     {
         Rotate(4.50f);
     }
     //Tir
     if (Keyboard.IsKeyPressed(Keyboard.Key.Space))
     {
         Fire(gw, deltaT);
     }
     //Lancé de bombe
     if (Keyboard.IsKeyPressed(Keyboard.Key.Return))
     {
         FireBomb(gw);
     }
     //Vérifier si le joueur est toujours en vie
     isAlive = this.Life > 0;
     return(isAlive);
 }
Пример #4
0
 /// <summary>
 /// Fonction dont le rôle est d'assurer le comportement de l'ennemi de base en toutes
 /// cirsonstances. L'ennemi suivra un parcourt aléatoire lorsqu'il ne détectera pas le
 /// joueur et foncera sur celui-ci s'il le perçoit tout en ouvrant le feu. Retourner VRAI
 /// si l'ennemi est toujours considéré comme vivant.
 /// </summary>
 /// <param name="deltaT">Représente la vitesse de rafraichissement du jeu</param>
 /// <param name="gw">Représente le jeu</param>
 /// <returns>Vaux VRAI si l'ennemi est toujours considéré comme viable et FAUX dans le cas contraire</returns>
 public override bool Update(Single deltaT, GW gw)
 {
     //Initialisation de l'effet de particule
     gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(enemyColor.R, enemyColor.G, enemyColor.B,
                                                                      (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.55f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1)));
     //En stade de spawn...
     if (IsSpawning)
     {
         Advance(1.50f);
         if (DateTime.Now >= timeSpawn)
         {
             spawnMusic.Play();
             IsSpawning = false;
             //Trouver une cible aléatoire
             cible      = new Vector2f(rnd.Next(15, GW.WIDTH - 50), rnd.Next(15, GW.HEIGHT - 50));
             angleCible = TargetAngle(cible);
             timeInvMax = new DateTimeOffset(DateTime.Now.AddSeconds(3.40f));
         }
     }
     //En stade de repérage
     if (DateTime.Now > timeChase)
     {
         BasicEnemySpeed = 0.17f;
         if (this.Position.X >= cible.X - 5 && this.Position.X <= cible.X + 5 && this.Position.Y >= cible.Y - 5 && this.Position.Y <= cible.Y + 5 ||
             DateTime.Now > timeInvMax)
         {
             timeInvMax = DateTime.Now.AddSeconds(rnd.Next(2, 4));
             cible      = new Vector2f(rnd.Next(30, GW.WIDTH - 30), rnd.Next(30, GW.HEIGHT - 30));
             angleCible = TargetAngle(cible);
         }
         if (Angle > angleCible)
         {
             Rotate(-BasicEnemySpeed);
         }
         else if (Angle < angleCible)
         {
             Rotate(BasicEnemySpeed);
         }
         if (Angle < TargetAngle(gw.hero.Position) + 10 && Angle > TargetAngle(gw.hero.Position) - 10)
         {
             timeChase = DateTime.Now.AddSeconds(rnd.Next(6, 15 + 1));
         }
         Advance(BasicEnemySpeed);
     }
     //En stade de tir
     else if (DateTime.Now < timeChase)
     {
         BasicEnemySpeed = 0.50f;
         float angleCible = TargetAngle(gw.hero.Position);
         if (Angle > angleCible + 12)
         {
             Rotate(-90 * deltaT);
         }
         else if (Angle < angleCible - 12)
         {
             Rotate(90 * deltaT);
         }
         else if (rnd.Next(0, 45 + 1) == 1)
         {
             for (int i = 0; i < 4; i++)
             {
                 fireSound.Play();
                 gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 0));
                 gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 90));
                 gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 180));
                 gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 270));
             }
         }
         Advance(BasicEnemySpeed);
     }
     return(true);
 }
Пример #5
0
 /// <summary>
 /// Fonction dont le rôle est d'assurer le comportement de l'ennemi de base en toutes
 /// cirsonstances. L'ennemi suivra un parcourt aléatoire lorsqu'il ne détectera pas le
 /// joueur et foncera sur celui-ci s'il le perçoit tout en ouvrant le feu. Retourner VRAI
 /// si l'ennemi est toujours considéré comme vivant.
 /// </summary>
 /// <param name="deltaT">Représente la vitesse de rafraichissement du jeu</param>
 /// <param name="gw">Représente le jeu</param>
 /// <returns>Vaux VRAI si l'ennemi est toujours considéré comme viable et FAUX dans le cas contraire</returns>
 public override bool Update(Single deltaT, GW gw)
 {
     //Initialisation de l'effet de particule
     gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(enemyColor.R, enemyColor.G, enemyColor.B,
                                                                      (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.55f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1)));
     //En stade de spawn...
     if (IsSpawning)
     {
         Advance(1.50f);
         if (DateTime.Now >= timeSpawn)
         {
             spawnMusic.Play();
             IsSpawning = false;
             //Trouver une cible aléatoire
             cible      = new Vector2f(rnd.Next(15, GW.WIDTH - 50), rnd.Next(15, GW.HEIGHT - 50));
             angleCible = TargetAngle(cible);
             timeInvMax = new DateTimeOffset(DateTime.Now.AddSeconds(3.40f));
         }
     }
     //En stade de repérage
     if (DateTime.Now > timeChase)
     {
         BasicEnemySpeed = 0.75f;
         if (canExplode)
         {
             canExplode = false;
         }
         if (Color.R != 63)
         {
             if (Color.R > 63)
             {
                 enemyColor.R -= (byte)1;
                 Color         = enemyColor;
             }
             else if (Color.R < 63)
             {
                 enemyColor.R += (byte)1;
                 Color         = enemyColor;
             }
         }
         if (this.Position.X >= cible.X - 5 && this.Position.X <= cible.X + 5 && this.Position.Y >= cible.Y - 5 && this.Position.Y <= cible.Y + 5 ||
             DateTime.Now > timeInvMax)
         {
             timeInvMax = DateTime.Now.AddSeconds(rnd.Next(2, 4));
             cible      = new Vector2f(rnd.Next(30, GW.WIDTH - 30), rnd.Next(30, GW.HEIGHT - 30));
             angleCible = TargetAngle(cible);
         }
         if (Angle > angleCible)
         {
             Rotate(-BasicEnemySpeed);
         }
         else if (Angle < angleCible)
         {
             Rotate(BasicEnemySpeed);
         }
         if (Angle < TargetAngle(gw.hero.Position) + 10 && Angle > TargetAngle(gw.hero.Position) - 10 &&
             Math.Abs(Position.X) + 5 >= Math.Abs(gw.hero.Position.X) && Math.Abs(Position.Y) + 5 >= Math.Abs(gw.hero.Position.Y))
         {
             timeChase = DateTime.Now.AddSeconds(rnd.Next(12, 15 + 1));
         }
         Advance(BasicEnemySpeed);
     }
     //En stade de chasse
     else if (DateTime.Now < timeChase)
     {
         canExplode      = true;
         BasicEnemySpeed = 0.75f;
         if (Color.R != 191)
         {
             if (Color.R > 191)
             {
                 enemyColor.R -= (byte)1;
                 Color         = enemyColor;
             }
             else if (Color.R < 191)
             {
                 enemyColor.R += (byte)1;
                 Color         = enemyColor;
             }
             //Tirer de façons aléatoire
             for (int i = 0; i < 2; i++)
             {
                 gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 5.00f, this.Size / 100, rnd.Next(0, 360 + 1)));
             }
         }
     }
     return(true);
 }