예제 #1
0
 public void Update(GW gw)
 {
     Angle = gw.hero.Angle - 180;
     Advance(starSpeed);
     this.Respawn();
 }
예제 #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);
 }
예제 #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);
 }
예제 #4
0
 public void Update(GW gw)
 {
     Advance(Speed);
 }
예제 #5
0
 public bool Update(GW gw)
 {
     if (Keyboard.IsKeyPressed(Keyboard.Key.Up))
     {
         Advance(heroSpeed);
         //"flamme" derrière le hero
         gw.particles.Add(new Particule(Position.X, Position.Y, Color.Yellow, 1.3f, Angle - rnd.Next(170, 190), 5));
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.Down))
     {
         Advance(-heroSpeed);
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.Right))
     {
         Rotate(5);
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.Left))
     {
         Rotate(-5);
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.Space))
     {
         if (fireDelay.Enabled == false)
         {
             fireDelay.Enabled = true;
             gw.projectiles.Add(new Projectile(CharacterType.Hero, Position.X, Position.Y, 0, Color.Blue, Angle, 10));
         }
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.Return))
     {
         //effet de la bombe
         if (bombDelay.Enabled == false)
         {
             if (nbBombs > 0)
             {
                 for (int i = 0; i < 360; i++)
                 {
                     gw.particles.Add(new Particule(Position.X, Position.Y, Color.Yellow, 0.5f, i, 25));
                 }
                 foreach (Enemy enemy in gw.enemies)
                 {
                     gw.enemiesToRemove.Add(enemy);
                 }
                 foreach (Enemy enemy in gw.basicEnemies)
                 {
                     gw.enemiesToRemove.Add(enemy);
                 }
                 nbBombs--;
             }
             bombDelay.Enabled = true;
         }
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.F4))
     {
         gw.CurrentLanguage = Language.French;
     }
     if (Keyboard.IsKeyPressed(Keyboard.Key.F5))
     {
         gw.CurrentLanguage = Language.English;
     }
     return(true);
 }