Ejemplo n.º 1
0
        /// <summary>
        /// Fonction retournant le niveau de résistance aux déplacements en fonction de la couleur du pixel de tuile
        /// à la position donnée.
        /// </summary>
        /// <param name="position">Position du pixel en coordonnées du monde.</param>
        /// <returns>Facteur de résistance entre 0.0f (aucune résistance) et 1.0f (résistance maximale).</returns>
        public float CalculerResistanceAuMouvement(Vector2 position)
        {
            Rectangle joueurRect = new Rectangle((int)this.joueur.PositionPourCollisions.X - 2, (int)this.joueur.PositionPourCollisions.Y - 2, 5, 5);

            foreach (Bloc bloc in this.listeBloc)
            {
                if (joueurRect.Intersects(bloc.AireOccupe))
                {
                    if (this.maBloc != bloc)
                    {
                        this.maBloc = bloc;
                        this.contPousseBloc = 0;
                    }

                    this.contPousseBloc++;
                    if (this.contPousseBloc > 20 && this.ValiderDeplacementBloc(bloc))
                    {
                        this.GestionBloc();
                    }

                    return 1.0f;
                }
            }

            foreach (Porte porte in this.listePorte)
            {
                if (!porte.Ouvert)
                {
                    if (joueurRect.Intersects(porte.Barre))
                    {
                        if (porte.PorteClef && this.joueur.Clef)
                        {
                            porte.Ouvert = true;
                            this.portesClefOuvert[0] = true;
                            this.boolClef = false;
                            this.joueur.Clef = false;
                        }
                        else
                        {
                            return 1.0f;
                        }
                    }
                }
            }

            foreach (PorteHorizontale porte in this.listePorteHorizontale)
            {
                if (!porte.Ouvert)
                {
                    if (joueurRect.Intersects(porte.Barre))
                    {
                        return 1.0f;
                    }
                }
            }

            // Extraire la couleur du pixel correspondant à la position donnée dans privTuilesCollisions.
            Color pixColor = this.monde.CouleurDeCollision(position);

            // Déterminer le niveau de résistance en fonction de la couleur
            if (pixColor == Color.White)
            {
                return 0.0f;
            }
            else if (pixColor == Color.Blue)
            {
                return 0.9f;
            }
            else
            {
                return 1.0f;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Verifie que la position finale du bloc est valide. (Il ne rentre pas dans une mûr, porte, ou autre bloc.)
        /// </summary>
        /// <param name="bloc">Le bloc à tester.</param>
        /// <returns>Return false pour valider le deplacement du joueur</returns>
        private bool ValiderDeplacementBloc(Bloc bloc)
        {
            if (this.joueur.Direction == Personnage.Directions.NordEst ||
                this.joueur.Direction == Personnage.Directions.NordOuest ||
                this.joueur.Direction == Personnage.Directions.SudEst ||
                this.joueur.Direction == Personnage.Directions.SudOuest)
            {
                return false;
            }

            Vector2 destV = bloc.Position;
            switch (this.joueur.Direction)
            {
                case Personnage.Directions.Nord:
                    destV.Y -= 28;
                    break;
                case Personnage.Directions.Est:
                    destV.X += 28;
                    break;
                case Personnage.Directions.Sud:
                    destV.Y += 28;
                    break;
                case Personnage.Directions.Ouest:
                    destV.X -= 28;
                    break;
                default: // Si le joueur se déplace sur un angle, il ne peut pas déplacer le bloc.
                    return false;
            }

            if ((this.monde.CouleurDeCollision(destV) != Color.White &&
                this.monde.CouleurDeCollision(destV) != Color.Blue) ||
                destV.Y < 95 ||
                destV.Y > 505 ||
                destV.X < 95 ||
                destV.X > 505)
            {
                return false;
            }

            Rectangle destBloc = new Rectangle((int)destV.X - 14, (int)destV.Y - 14, 28, 28);

            foreach (Bloc bloc1 in this.listeBloc)
            {
                if (destBloc.Intersects(bloc1.AireOccupe))
                {
                    return false;
                }
            }

            return true;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Fonction qui load tout les elements de map 1-2           
        /// </summary>
        private void LoadMap12()
        {
            this.ClearMap();

            Bloc bloc0 = new Bloc(106, 272);
            bloc0.BoundsRect = new Rectangle(64, 230, 84, 84);

            Bloc bloc1 = new Bloc(134, 300);
            bloc1.BoundsRect = new Rectangle(92, 258, 84, 84);

            Bloc bloc2 = new Bloc(106, 328);
            bloc2.BoundsRect = new Rectangle(64, 286, 84, 84);

            this.listeBloc.Add(bloc0);
            this.listeBloc.Add(bloc1);
            this.listeBloc.Add(bloc2);

            Ogre ogre = new Ogre(new Vector2(152, 144));
            this.listeOgres.Add(ogre);
            Ogre ogre1 = new Ogre(new Vector2(444, 144));
            this.listeOgres.Add(ogre1);

            OgreMouvement ogre2 = new OgreMouvement(new Vector2(350, 350));
            this.listeOgres.Add(ogre2);
            ogre2.BoundsRect = new Rectangle(300, 300, 193, 215);

            Switch switch1 = new Switch(134, 272);
            this.listeSwitch.Add(switch1);
            switch1.Type = Switch.Types.Nord;

            Switch switch2 = new Switch(162, 300);
            this.listeSwitch.Add(switch2);
            switch2.Type = Switch.Types.Est;

            Porte porteNord = new Porte(300, 75, Porte.Directions.Nord);
            porteNord.Ouvert = true; // fermé au prochaine Update, invoque le son de fermeture
            this.listePorte.Add(porteNord);

            PorteHorizontale porteEst = new PorteHorizontale(525, 300, PorteHorizontale.Directions.Est);
            porteEst.Ouvert = true; // fermé au prochaine Update, invoque le son de fermeture
            porteEst.Direction = PorteHorizontale.Directions.Est;
            this.listePorteHorizontale.Add(porteEst);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Fonction qui load tout les elements de map 1-3           
        /// </summary>
        private void LoadMap13()
        {
            this.ClearMap();

            Bloc bloc0 = new Bloc(404, 150);
            Bloc bloc1 = new Bloc(404, 175);
            bloc0.BoundsRect = bloc1.BoundsRect = new Rectangle(362, 100, 84, 415);

            Ogre ogre = new Ogre(new Vector2(210, 144));
            this.listeOgres.Add(ogre);
            Ogre ogre1 = new Ogre(new Vector2(360, 144));
            this.listeOgres.Add(ogre1);

            OgreMouvement ogre2 = new OgreMouvement(new Vector2(300, 300));
            ogre2.BoundsRect = new Rectangle(240, 144, 120, 200);
            this.listeOgres.Add(ogre2);

            this.listeBloc.Add(bloc0);
            this.listeBloc.Add(bloc1);
            if (this.boolFood == true)
            {
                Food food = new Food(475, 120);
                this.listeFood.Add(food);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Fonction qui load tout les elements de map 1-1           
        /// </summary>
        private void LoadMap11()
        {
            this.ClearMap();

            Bloc bloc0 = new Bloc(300, 105);
            bloc0.BoundsRect = new Rectangle(258, 63, 84, 84);

            this.listeBloc.Add(bloc0);

            OgreMouvement ogre = new OgreMouvement(new Vector2(400, 300));
            ogre.BoundsRect = new Rectangle(91, 91, 415, 415);
            this.listeOgres.Add(ogre);
        }