/// <summary> /// Permet de verifier si des collisions entre pacman et des objets (fantomes,fruits) arrivent ainsi que /// d'appliquer l'evenement relier au collision /// </summary> private void VérifierCollision() { Fantôme fantôme = m_listeFantômesActifs.Find(c => c.Coordonnée.EstProche(Pacman.Coordonnée, TailleCase / 4)); if (m_fruitActif != null && m_fruitActif.Coordonnée.EstProche(Pacman.Coordonnée, TailleCase / 4)) { MettreAJourScore(m_fruitActif.ObtenirValeurFruit()); m_fruitActif = null; } if (fantôme == null) { return; } if (fantôme.EstApeuré()) { MettreFantômeManger(fantôme); } else { m_nbVies--; RéinitialiserAprèsMort(); } }
/// <summary> /// Permet de ramener les elements en place apres la mort du joueur (pacman) par un fantome /// </summary> internal void RéinitialiserAprèsMort() { RedessinerMur(); RéinitialiserPositions(); m_listeFantômesActifs.Clear(); m_cptAction = 0; m_cptFantômePeur = 0; m_listeFantômesMangers.Clear(); m_cptFantômesMorts = 0; m_cptFruit = FrameRateValue * 2; m_fruitActif = null; // on perd le fruit en cours }
/// <summary> /// Va tenter de faire apparraitre un fruit dans la carte de jeux /// une probabilite de 1 sur 80 en honneur a Pacman et sa date de sortie 1980 /// </summary> private void VérifierApparitionFruit() { Random random = new Random(); if (m_fruitActif == null && m_cptFruit != 0) { --m_cptFruit; } if (m_cptFruit == 0 && random.Next(0, 100) == 80) // une chance sur 80 a 60 fois par secondes { m_cptFruit = FrameRateValue * 4 + (Niveau / 5 * FrameRateValue / 2); // 4 secondes + une demie seconde par niveau m_fruitActif = m_listeFruits.Dequeue(); } }
/// <summary> /// Va generer tout les fruits relier au niveau actuel et les mettre dans une File /// </summary> internal void RemplirFruits() { m_fruitActif = null; m_listeFruits.Clear(); Coordonnée centreXCase17 = new Coordonnée(CentreX, Grille.TrouverCoordonnéeCase(0, 17).Y); m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerCerise(new Coordonnée(centreXCase17)))); if (Niveau >= 2) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerFraise(new Coordonnée(centreXCase17)))); } if (Niveau >= 3) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerOrange(new Coordonnée(centreXCase17)))); } if (Niveau >= 5) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerPomme(new Coordonnée(centreXCase17)))); } if (Niveau >= 7) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerMelon(new Coordonnée(centreXCase17)))); } if (Niveau >= 9) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerGalboss(new Coordonnée(centreXCase17)))); } if (Niveau >= 11) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerCloche(new Coordonnée(centreXCase17)))); } if (Niveau >= 13) { m_listeFruits.Enqueue(new FruitAnimable(FabriqueFruit.FabriquerCle(new Coordonnée(centreXCase17)))); } }
/// <summary> /// Constructeur par defaut d'une partie, va instancier tout les elements /// necessaire a la partie /// </summary> private Partie() { FrameRate(50); Score = 0; Record = 0; m_cptPointPourVie = 1; m_nbVies = 3; Grille = new GrilleJeu(false); Pacman = new PacMan(new Coordonnée(CentreX, Grille.TrouverCoordonnéeCase(0, 17).Y)); m_listeFantômes = new List <Fantôme>(); m_listeFantômesActifs = new List <Fantôme>(); m_listeFantômesMangers = new Queue <Fantôme>(); m_listeFruits = new Queue <FruitAnimable>(); m_fruitActif = null; m_cptFantômesMorts = 0; Blinky = new Fantôme(Grille.TrouverCoordonnéeCase(12, 13), CouleurFantôme.Blinky); Pinky = new Fantôme(Grille.TrouverCoordonnéeCase(17, 13), CouleurFantôme.Pinky); Inky = new Fantôme(Grille.TrouverCoordonnéeCase(12, 15), CouleurFantôme.Inky); Clyde = new Fantôme(Grille.TrouverCoordonnéeCase(17, 15), CouleurFantôme.Clyde); m_listeFantômes.AddRange(new[] { Blinky, Pinky, Inky, Clyde }); m_comportementFruit = new ComportementClyde(); // Les fruits vont avoir le meme comportement que Clyde (Aleatoire) m_ia = new IntelligenceArtificielle(); MurDejaDessiner = false; Niveau = 1; m_cptAction = 0; m_cptFantômePeur = 0; m_cptFruit = FrameRateValue * 2; }