Esempio n. 1
0
 /// <summary>
 /// Fonction dont le rôle est de tirer un projectile.
 /// </summary>
 /// <param name="gw">Le jeu (motteur)</param>
 /// <param name="deltaT">Représente le multiplicateur de vitesse de rafraichissement
 /// du jeu</param>
 /// <return>Retourne un booléen vallant Vrai si le tir est fait et Faux si le tir n'est pas fait </return>
 public virtual bool Fire(GW gw, Single deltaT)
 {
     //Si la demande de tir est supérieure ou égale au dernier moment de tir + la cadence, alors
     if (DateTime.Now >= lastFire.AddSeconds(fireDelay))
     {
         //Le dernier moment de tir:
         lastFire = DateTime.Now;
         //Jouer l'effet sonore de tir
         fireSound.Play();
         //Ajouter le projectile (tirer)
         gw.AddProjectile(new Projectile(type, Position.X, Position.Y, 4, Color.Red, 7.50f, 3.50f, Angle));
         //succès, la cadence de tir est respectée
         return(true);
     }
     else
     {
         //échec, la cadence de tir n'est pas respectée
         return(false);
     }
 }
Esempio n. 2
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);
 }
Esempio n. 3
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);
 }