Example #1
0
        private void Spawn()
        {
            #region Stones
            //  Amount of stones spawned, ServicesHelper.RandomGeneratorom number betwenn 2 and 5
            int stones    = ServicesHelper.RandomGenerator.Next(2, 6);
            int stoneType = 0;
            for (int i = 0; i < stones; i++)
            {
                Sprite stone;

                //  One chance on 8 of being a diamond
                stoneType = ServicesHelper.RandomGenerator.Next(1, 9);

                //  Random speed
                Vector2 stoneSpeed, stonePosition;
                if (stoneType == 1)
                {
                    //  Is a diamond
                    stonePosition = new Vector2(ServicesHelper.RandomGenerator.Next(0, Game.Window.ClientBounds.Width + 1 - diamond.Width), 0);
                    stoneSpeed    = new Vector2(0, ServicesHelper.RandomGenerator.Next(3, 9));
                    stone         = new DiamondSprite(diamond, stonePosition, stoneSpeed);
                }
                else
                {
                    //  Is a gem
                    stonePosition = new Vector2(ServicesHelper.RandomGenerator.Next(0, Game.Window.ClientBounds.Width + 1 - (gem.Width / 5)), 0);
                    stoneSpeed    = new Vector2(0, ServicesHelper.RandomGenerator.Next(1, 6));
                    stone         = new GemSprite(gem, 1, 5, stonePosition, stoneSpeed);
                }

                //  Add newly created stone to the list
                preciousStones.Add(stone);
            }
            #endregion
            #region Enemies
            //  Amount of enemies spawned, ServicesHelper.RandomGeneratorom number between 0 and 7
            int numberOfEnemies = ServicesHelper.RandomGenerator.Next(0, 8);

            for (int i = 0; i < numberOfEnemies; i++)
            {
                //  Random number for the texture of the enemy to spawn
                int textureIndex = ServicesHelper.RandomGenerator.Next(0, texEnnemies.Count);

                //  Random position
                Vector2 enemyPosition = new Vector2(ServicesHelper.RandomGenerator.Next(0, Game.Window.ClientBounds.Width - (int)(texEnnemies[textureIndex].Width * ENEMY_SCALE)), 0);

                //  Random speed
                Vector2      enemySpeed = new Vector2(0, ServicesHelper.RandomGenerator.Next(2, 8));
                EnnemiSprite enemy      = new EnnemiSprite(texEnnemies[textureIndex], 1, 1, enemyPosition, enemySpeed, 1, 35, ENEMY_SCALE);
                enemies.Add(enemy);
            }
            #endregion
        }
Example #2
0
        /// <summary>
        /// On vérifie si on peut pondre l'ennemi
        /// </summary>
        /// <param name="ennemi">Ennemi en question</param>
        private bool EnnemiSpawnError(EnnemiSprite ennemi)
        {
            bool error = false;

            foreach (EnnemiSprite e in listeEnnemis)
            {
                if (e.Collision(ennemi))
                {
                    error = true;
                    break;
                }
            }
            return(error);
        }
Example #3
0
        /// <summary>
        /// Mise à jour des ennemis
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected void updateEnnemi(GameTime gameTime)
        {
            // Identifier les ennemis ayant quitté l'écran.
            List <EnnemiSprite> ennemisFini = new List <EnnemiSprite>();

            foreach (EnnemiSprite ennemi in this.listeEnnemis)
            {
                if (this.camera.EstADroite(ennemi.PositionRect))
                {
                    ennemisFini.Add(ennemi);
                }
            }

            // Se débarrasser des ennemis ayant quitté l'écran.
            foreach (EnnemiSprite ennemi in ennemisFini)
            {
                this.listeEnnemis.Remove(ennemi);
            }

            // Mettre à jour les ennemis existants.
            foreach (EnnemiSprite ennemi in this.listeEnnemis)
            {
                ennemi.Update(gameTime, this.graphics);
            }

            // Déterminer si on doit créer un nouvel ennemi.
            if (this.randomEnnemis.NextDouble() < this.probEnnemis)
            {
                Random random = new Random();

                EnnemiSprite ennemi = null;

                if (random.NextDouble() < probEnnemiType)
                {
                    ennemi = new EnnemiSpinner(0, 0);
                }
                else
                {
                    ennemi = new EnnemiShip(0, 0);
                }

                if (ennemi == null)
                {
                    return;
                }

                ennemi.ShootObus        += Shoot;
                ennemi.GetAngleToPlayer += AngleToPlayer;

                // Positionner aléatoirement le sprite au haut de l'écran.
                do
                {
                    ennemi.Position = new Vector2(this.graphics.GraphicsDevice.Viewport.Width + ennemi.Width / 2,
                                                  random.Next(ennemi.Height, this.graphics.GraphicsDevice.Viewport.Height - ennemi.Height));
                } while (EnnemiSpawnError(ennemi));

                // Aligner la vitesse de déplacement de l'ennemi avec celui de l'arrière-plan.
                ennemi.VitesseDeplacement = this.arrierePlanEspace.VitesseArrierePlan;

                // Ajouter le sprite à la liste d'ennemis.
                this.listeEnnemis.Add(ennemi);
            }
        }
Example #4
0
        /// <summary>
        /// Routine mettant à jour les obus. Elle s'occupe de:
        ///   1 - Détruire les obus ayant quitté l'écran sans collision
        ///   2 - Déterminer si un des obus a frappé un sprite, et si c'est le cas
        ///       détruire les deux sprites (probablement un astéroïde)
        ///   3 - Mettre à jour la position des obus existants.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected void UpdateObus(GameTime gameTime)
        {
            // Identifier les obus ayant quitté l'écran.
            foreach (Obus obus in this.listeObusJoueur)
            {
                if (obus.Position.X + obus.Width > this.graphics.GraphicsDevice.Viewport.Width + obus.Width ||
                    obus.Position.X < 0 ||
                    obus.Position.Y < 0 ||
                    obus.Position.Y - obus.Height > this.graphics.GraphicsDevice.Viewport.Height)
                {
                    listeObusFini.Add(obus);
                }
            }

            foreach (Obus obus in this.listeObusEnnemis)
            {
                if (obus.Position.X + obus.Width > this.graphics.GraphicsDevice.Viewport.Width - obus.Width ||
                    obus.Position.X < 0 ||
                    obus.Position.Y < 0 ||
                    obus.Position.Y - obus.Height > this.graphics.GraphicsDevice.Viewport.Height)
                {
                    listeObusFini.Add(obus);
                }
            }

            // Determiner si un obus a frappé un astéroïde, et si c'est le cas détruire les deux sprites.
            foreach (Obus obus in this.listeObusJoueur)
            {
                // Premièrement, est-ce que l'obus a touché un astéroïde?
                EnnemiSprite cible = (EnnemiSprite)obus.Collision(this.listeEnnemis);
                // Si oui, détruire les deux sprites impliqués et produire une explosion
                if (cible != null && obus.Source != cible)
                {
                    cible.Health -= obus.Damage;
                    this.CreerExplosion(cible, this.particulesExplosions, gameTime, 0.5f);
                    listeObusFini.Add(obus);
                    if (cible.Health < 1)
                    {
                        // Détruire la cible.
                        this.listeEnnemis.Remove(cible);

                        points += 10f;
                        if (points % 100 == 0)
                        {
                            probEnnemis += 0.005f;
                        }

                        // Créer un nouvel effet visuel pour l'explosion.
                        this.CreerExplosion(cible, this.particulesExplosions, gameTime, 1f);

                        // Activer l'effet sonore de l'explosion.
                        bruitageExplosion.Play(0.25f, 0f, 0f);

                        if (randomPowerup.NextDouble() <= probPowerUp)
                        {
                            PowerUp powerup;
                            if (randomPowerup.NextDouble() > 0.5f)
                            {
                                if (probEnnemis / 0.005f == 1)
                                {
                                    powerup = new PowerUp_One_Projectile(cible.Position);
                                }
                                else if (probEnnemis / 0.005f == 2)
                                {
                                    if (randomPowerup.NextDouble() > 0.75f)
                                    {
                                        powerup = new PowerUp_One_Projectile(cible.Position);
                                    }
                                    else
                                    {
                                        powerup = new PowerUp_Two_Projectile(cible.Position);
                                    }
                                }
                                else
                                {
                                    if (randomPowerup.NextDouble() > 0.5f)
                                    {
                                        powerup = new PowerUp_Three_Projectile(cible.Position);
                                    }
                                    else
                                    {
                                        if (randomPowerup.NextDouble() > 0.5f)
                                        {
                                            powerup = new PowerUp_One_Projectile(cible.Position);
                                        }
                                        else
                                        {
                                            powerup = new PowerUp_Two_Projectile(cible.Position);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (randomPowerup.NextDouble() > 0.5f)
                                {
                                    powerup = new PowerUp_Fire_Shot(cible.Position);
                                }
                                else
                                {
                                    powerup = new PowerUp_Energy_Ball(cible.Position);
                                }
                            }
                            this.listePowerUp.Add(powerup);
                        }
                    }
                }
            }

            foreach (Obus obus in this.listeObusEnnemis)
            {
                if (!vaisseauJoueur.IsRespawned && obus.Collision(this.vaisseauJoueur) && obus.Source != vaisseauJoueur)
                {
                    vaisseauJoueur.Health -= obus.Damage;
                    this.CreerExplosion(vaisseauJoueur, this.particulesExplosions, gameTime, 0.5f);
                    // Détruire la cible et l'obus.
                    //this.listeEnnemis.Remove(cible);
                    listeObusFini.Add(obus);

                    if (vaisseauJoueur.Health < 1)
                    {
                        vaisseauJoueur.IsRespawned  = true;
                        this.vaisseauJoueur.NbVies -= 1;
                        // Créer un nouvel effet visuel pour l'explosion.
                        this.CreerExplosion(vaisseauJoueur, this.particulesExplosions, gameTime, 1f);
                        this.vaisseauJoueur.Position = this.vaisseauJoueur.PositionInitiale;
                        // Activer l'effet sonore de l'explosion.
                        bruitageExplosion.Play(0.25f, 0f, 0f);
                    }
                }
            }

            // Se débarasser des obus n'étant plus d'aucune utilité.
            foreach (Obus obus in listeObusFini)
            {
                if (obus.Source == vaisseauJoueur)
                {
                    this.listeObusJoueur.Remove(obus);
                }
                else
                {
                    this.listeObusEnnemis.Remove(obus);
                }
            }

            // Mettre à jour les obus existants.
            foreach (Obus obus in this.listeObusJoueur)
            {
                obus.Update(gameTime, this.graphics);
            }

            foreach (Obus obus in this.listeObusEnnemis)
            {
                obus.Update(gameTime, this.graphics);
            }
        }