Esempio n. 1
0
 /// <summary>
 /// Constructeur du jeu, initialise les variables et instances de la partie.
 /// </summary>
 public MillipedeGame( )
 {
     //<Charles Lachance>
     //On journalise le début d'une nouvelle partie
     Logger.GetInstance().Log("Game started");
     //</Charles Lachance>
     //<Tommy Bouffard>
     for (int i = 0; i != NB_STARTING_MUSHROOM; i++)
     {
         mushrooms.Add(new Mushroom(rnd.Next(0, NB_HORIZONTAL_BLOCKS), rnd.Next(0, 2 * NB_VERTICAL_BLOCKS / 3)));
     }
     //Lors du début du jeu on commence à faire jouer la musique
     sndTrack.PlayLooping();
     //</Tommy Bouffard>
     //<Charles Lachance>
     //On initialise le tableau des serpents
     snakes = new List <Snake>();
     //On ajoute un serpent de départ
     snakes.Add(new Snake(rnd.Next(Snake.MIN_LENGTH + nbOfSnakeSpawned, Snake.MAX_LENGTH + nbOfSnakeSpawned)));
     //On as fait apparaitre un serpent
     nbOfSnakeSpawned = 1;
     //Aucune recharge de munitions n'est créé au début
     powerup = null;
     //</Charles Lachance>
 }
Esempio n. 2
0
        /// <summary>
        /// Met à jour le jeu
        /// </summary>
        /// <returns>Retourne EndGameResult.GAME_LOST si le joueur est mort. Retourne EndGameResult.GAME_CONTINUE sinon.</returns>
        public EndGameResult Update()
        {
            //<Charles Lachance>
            //Si le joueur est vivant
            if (player.NbLives > 0)
            {
                //Pour chaque serpent...
                for (int i = 0; i < snakes.Count; i++)
                {
                    //Si le serpent est mort ou en dehors de l'écran...
                    if (!snakes[i].Update(mushrooms))
                    {
                        //On retire le serpent
                        snakes.RemoveAt(i);
                        //On reste sur le même indice puisque tous les éléments sont décalés de une position
                        i--;
                    }
                }

                //Rectangle représentant une partie de serpent
                Rectangle snakeRect = new Rectangle();
                snakeRect.Height = OBJECT_SIZE;
                snakeRect.Width  = OBJECT_SIZE;

                //Rectangle représentant le joueur
                Rectangle playerRect = new Rectangle();
                playerRect.Height = Player.PLAYER_HEIGHT;
                playerRect.Width  = Player.PLAYER_WIDTH;
                playerRect.X      = player.XPosition;
                playerRect.Y      = player.YPosition;

                //Pour chaque serpent...
                for (int i = 0; i < snakes.Count; i++)
                {
                    //Pour chaque partie de serpent...
                    for (int j = 0; j < snakes[i].Length; j++)
                    {
                        //On change la position du rectangle représentant le serpent
                        snakeRect.X = snakes[i][j].X * OBJECT_SIZE;
                        snakeRect.Y = snakes[i][j].Y * OBJECT_SIZE;

                        //Si le joueur touche à la partie de serpent...
                        if (CheckIntersectionBetweenRectangle(snakeRect, playerRect))
                        {
                            //On diminue le nombre de vie du joueur
                            player.NbLives--;
                            //On élimine tous les ennemis du jeu
                            KillAll();
                            break;
                        }

                        //Pour chaque balle...
                        for (int k = 0; k < bullets.Count; k++)
                        {
                            //Si la balle touche au serpent...
                            if (snakes[i][j].X == bullets[k].XPosition / OBJECT_SIZE && snakes[i][j].Y == bullets[k].YPosition / OBJECT_SIZE)
                            {
                                //On crée deux nouveaux serpents
                                Snake snake1 = new Snake();
                                Snake snake2 = new Snake();

                                //On sépare l'ancien serpent en deux
                                snakes[i].Split(new Point(bullets[k].XPosition / OBJECT_SIZE, bullets[k].YPosition / OBJECT_SIZE), snake1, snake2);

                                //On ajoute un champignon à la position de la partie du serpent ayant été touché
                                mushrooms.Add(new Mushroom(snakes[i][j].X, snakes[i][j].Y));

                                //On retire la balle du jeu
                                bullets.RemoveAt(k);

                                //On retire l'ancien serpent du jeu
                                snakes.RemoveAt(i);

                                //On ajoute les deux nouveaux serpents
                                snakes.Add(snake1);
                                snakes.Add(snake2);

                                //On augmente le score
                                score += 1;
                                break;
                            }
                        }
                    }
                }

                //S'il ne reste plus de serpent en jeu...
                if (snakes.Count == 0)
                {
                    //On ajoute un nouveau serpent
                    snakes.Add(new Snake(rnd.Next(Snake.MIN_LENGTH + nbOfSnakeSpawned, Snake.MAX_LENGTH + nbOfSnakeSpawned)));
                    //On augmente le nombre de serpent ayant été créé
                    nbOfSnakeSpawned++;
                }

                //</charles Lachance>
                //<Tommy Bouffard>
                player.Update();
                if (rnd.Next(0, 251) == 250)
                {
                    spiders.Add(new Spider());
                }
                foreach (Projectile shot in bullets)
                {
                    shot.Update();
                }
                if (Keyboard.IsKeyDown(Key.Space))
                {
                    //<charles Lachance>
                    //Si le joueur manque de balle et que la recharge de munition n'existe pas...
                    if (player.Ammo <= BulletPowerup.MIN_AMMO_TO_SPAWN && powerup == null)
                    {
                        powerup = new BulletPowerup(); //On crée une nouvelle recharge de munition
                    }
                    //</charles Lachance>
                    bullets.Add(player.Fire());
                }
                Rectangle spiderRect = new Rectangle();
                spiderRect.Height = Spider.SPIDER_SIZE;
                spiderRect.Width  = Spider.SPIDER_SIZE;
                //<Tommy Bouffard>
                for (int i = 0; i < spiders.Count; i++)
                {
                    spiders[i].Update();
                    spiderRect.X = (int)spiders[i].XPosition;
                    spiderRect.Y = (int)spiders[i].YPosition;
                    if (CheckIntersectionBetweenRectangle(spiderRect, playerRect))
                    {
                        player.NbLives--;
                        //<charles Lachance>
                        KillAll(); //On élimine tous les ennemis
                        //</charles Lachance>
                    }
                }
                //</Tommy Bouffard>
                //<charles Lachance>
                //Si la recharge de munition existe et qu'elle a été prise par le joueur...
                if (powerup != null && powerup.Update(player))
                {
                    powerup = null; //On la retire du jeu
                }
                //</charles Lachance>

                RemoveShotEntities();
                RandomizeSpiders();
                //<charles Lachance>
                //Si le joueur est mort...
                if (player.NbLives <= 0)
                {
                    //On journalise la fin de partie
                    Logger.GetInstance().Log("Game ended");
                    //On élimine tous les ennemis
                    KillAll();
                }
            }
            else
            {
                return(EndGameResult.GAME_LOST);
            }
            return(EndGameResult.GAME_CONTINUE);
            //</charles Lachance>
        }