/// <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> }
/// <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> }