Ejemplo n.º 1
0
        public void GenLaby()
        {
            if (materials != null)
            {
                foreach(Material m in materials)
                    m.Dispose();
                materials = null;
            }
            laby.BuildMaze(new Point(laby.Size.X, laby.Size.Y), new Vector3(laby.CellSize.X, laby.CellSize.Y, laby.CellSize.Z), Content, laby, graphics.GraphicsDevice, liste_bonus_actifs);
            // On charge le labyrinthe en vertices
            MazeMaterialBuilder materialBuilder = new MazeMaterialBuilder();

            if(Config.modedejeu)
                materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_sortie);
            else
                materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_scientifique);
            materials_save = materials;
            // On refixe les positions du joueur et du chasseur
            joueur.position = laby.joueur_position_initiale;

            if (Config.modedejeu)
                chasseur.position = new Vector3(laby.chasseur_position_initiale.X / chasseur.Scale, laby.chasseur_position_initiale.Y, laby.chasseur_position_initiale.Z / chasseur.Scale);
            else
                scientifique.position = new Vector3(laby.chasseur_position_initiale.X / scientifique.Scale, laby.chasseur_position_initiale.Y, laby.chasseur_position_initiale.Z / scientifique.Scale);
        }
Ejemplo n.º 2
0
        public override bool Init()
        {
            if (!Config.pause)
            {
                /**************************************/
                /*** Constantes pour le labyrinthe ****/
                /**************************************/
                int hauteur = Config.hauteur_labyrinthe;
                int largeur = Config.largeur_labyrinthe;

                // On génére un chiffre aléatoire
                Random rand = new Random();

                spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

                // On charge la police du texte
                Kootenay = Content.Load<SpriteFont>(@"Polices\Kootenay");
                Arial = Content.Load<SpriteFont>(@"Polices\Arial");

                perso = Content.Load<SpriteFont>(@"Polices\Perso");

                // Carte 2D
                carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\joueur");
                carte2D_mur = Content.Load<Texture2D>(@"Images\carte2D\mur");
                carte2D_chemin = Content.Load<Texture2D>(@"Images\carte2D\chemin");
                carte2D_sortie = Content.Load<Texture2D>(@"Images\carte2D\sortie");
                if (Config.modedejeu)
                {
                    carte2D_chasseur = Content.Load<Texture2D>(@"Images\carte2D\chasseur");
                    carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\joueur");
                }
                else
                {
                    carte2D_chasseur = Content.Load<Texture2D>(@"Images\carte2D\joueur");
                    carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\chasseur");
                }

                carte2D_bonus = Content.Load<Texture2D>(@"Images\carte2D\bonus");
                carte2D_piege = Content.Load<Texture2D>(@"Images\carte2D\piege");

                // Boussole et Chronometre
                if (Config.modedejeu)
                {
                    chronometre_texture = Content.Load<Texture2D>(@"Images\chronometre");
                    boussole_support = Content.Load<Texture2D>(@"Images\boussole_support");
                    boussole_fleche = Content.Load<Texture2D>(@"Images\boussole_fleche");
                    boussole_fleche_sortie = Content.Load<Texture2D>(@"Images\boussole_fleche-sortie");
                }
                else
                {
                    radar_cible = Content.Load<Texture2D>(@"Images\radar_cible");
                    radar_support = Content.Load<Texture2D>(@"Images\radar_support");
                }

                // Temporisation
                tempo_load = Content.Load<Texture2D>(@"Images\tempo_load");
                tempo_fixe = Content.Load<Texture2D>(@"Images\tempo_fixe");

                effet = Content.Load<Effect>(@"Effets\Effet2");

                // Audio
                Audio = new AudioEngine(@"Content\Musiques\ambiance.xgs");

                // Charge la banque de musiques
                SoundBank = new SoundBank(Audio, @"Content\Musiques\Sound Bank.xsb");
                WaveBank = new WaveBank(Audio, @"Content\Musiques\Wave Bank.xwb");

                // Joue la musique d'ambiance
                musique_ambiance = SoundBank.GetCue("ambiance_labyrinthe");

                // Sons
                if (Config.modedejeu)
                    son_mort = "mort";
                else
                    son_mort = "mort_chasseur";

                musique_ambiance.Play();

                // Fixe le volume du jeu
                Audio.GetCategory("Musiques").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_musiques);
                Audio.GetCategory("Sons").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_sons);

                // Sons d'ambiance aléatoire
                son_ambiance_aleatoire = SoundBank.GetCue("son_ambiance_aleatoire");
                compteur_son_ambiance_aleatoire = rand.Next(10, 30);

                // Son mort subite
                if (Config.modedejeu)
                    son_mort_subite = SoundBank.GetCue("son_mort_subite_chasseur");
                else
                    son_mort_subite = SoundBank.GetCue("son_mort_subite_chasse");

                son_mort_subite_unique = false;

                if (Config.modedejeu)
                    musique_poursuite = SoundBank.GetCue("poursuite");

                // On charge les textures
                textures = new Texture2D[8];
                textures[0] = Content.Load<Texture2D>(@"Textures\texture_plafond");
                textures[1] = Content.Load<Texture2D>(@"Textures\texture_mur");
                textures[2] = Content.Load<Texture2D>(@"Textures\texture_mur_sortie");
                textures[3] = Content.Load<Texture2D>(@"Textures\texture_fond_sortie");
                textures[4] = Content.Load<Texture2D>(@"Textures\texture_sol");
                textures[5] = Content.Load<Texture2D>(@"Textures\texture_mur_trappe");
                textures[6] = Content.Load<Texture2D>(@"Textures\texture_sol_trappe");
                textures[7] = Content.Load<Texture2D>(@"Textures\texture_sol_plafond_sortie");

                noir = Content.Load<Texture2D>(@"Images\black");

                transition_fin_blanc = Content.Load<Texture2D>(@"Images\blanc");

                compteur_transition_debut = 2f;
                transition_debut_finie = false;
                transition_debut_messages = new string[2];
                transition_debut_messages[0] = "Pret ?";
                transition_debut_messages[1] = "Go !";

                /***************************************************/
                /***************** Initialisation ! ****************/
                /***************************************************/

                // Triche
                triche = false;
                pass = "";
                compteur_message_triche = 0;

                // Liste des bonus actifs
                if (!Config.modedejeu)
                    Config.boussole_sortie = false;
                liste_bonus_actifs = new List<int>();
                liste_bonus_actifs = Liste_Bonus_Actifs();

                if (liste_bonus_actifs.Count == 0)
                    Config.active_bonus = false;

                // Pièges désactivés ?
                if (!Config.trappe && !Config.laser)
                    Config.active_pieges = false;

                // Génération du labyrinthe
                laby = new Labyrinthe();

                laby.BuildMaze(new Point(largeur, hauteur), new Vector3(2.5f), Content, laby, graphics.GraphicsDevice, liste_bonus_actifs);
                // On charge le labyrinthe en vertices
                materialBuilder = new MazeMaterialBuilder();

                // On génére un chiffre aléatoire
                rand = new Random();

                // Joueur
                joueur = new Joueur(graphics.GraphicsDevice.Viewport, laby, SoundBank);
                son_mort_unique = false;

                // Chasseur
                if (Config.modedejeu)
                {
                    // IA
                    ia = new IA(laby, new Point((int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)), graphics.GraphicsDevice.Viewport);

                    chasseur = new Chasseur(graphics.GraphicsDevice.Viewport, laby, Content, ia);
                    poursuite = false;
                    compteur_animation_fin_chasseur = 1f;
                    chasseur_touche = false;
                }
                // Scientifique
                else
                {
                    // IA
                    ia = new IA(laby, laby.sortie_position, graphics.GraphicsDevice.Viewport);

                    scientifique = new Scientifique(graphics.GraphicsDevice.Viewport, laby, Content, ia);
                    compteur_animation_fin_scientifique = 1f;
                    scientifique_touche = false;
                }

                // Carte de sortie
                if (Config.modedejeu)
                {
                    carte_joueur_sortie = new bool[Config.largeur_labyrinthe, Config.hauteur_labyrinthe];
                    GenCarteJoueurSortie();
                    materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_sortie);
                    materials_save = materials;
                }
                else
                {
                    carte_joueur_scientifique = new bool[Config.largeur_labyrinthe, Config.hauteur_labyrinthe];
                    GenCarteJoueurScientifique();
                    materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_scientifique);
                    materials_save = materials;
                }

                // Infos par texte
                InfoTexteGauche = 0;
                InfoTexteHaut = 40;

                // Constantes pour l'affichage de la carte 2D
                EspaceTexte = 22;
                EspaceTexture = carte2D_chemin.Width;

                TextureRedimension = 1;
                carte2D_taille_texture = new Vector2(carte2D_chemin.Width * TextureRedimension, carte2D_chemin.Height * TextureRedimension);
                BordGaucheTexture = (int)(graphics.GraphicsDevice.Viewport.Width / 2 - (carte2D_taille_texture.X * (laby.Size.X) * echelle) / 2);
                BordHautTexture = (int)(graphics.GraphicsDevice.Viewport.Height / 2 - (carte2D_taille_texture.Y * laby.Size.Y * echelle) / 2);
                carte2D_couleur_texture = Color.White;

                echelle = 0;
                while (carte2D_taille_texture.Y * echelle * laby.Size.Y < graphics.GraphicsDevice.Viewport.Height - (graphics.GraphicsDevice.Viewport.Height / 4) &&
                        carte2D_taille_texture.X * echelle * laby.Size.X < graphics.GraphicsDevice.Viewport.Height)
                {
                    echelle += 0.01f;
                }

                BordGaucheTexture = (int)(graphics.GraphicsDevice.Viewport.Width / 2 - (carte2D_taille_texture.X * (laby.Size.X) * echelle) / 2);
                BordHautTexture = (int)(graphics.GraphicsDevice.Viewport.Height / 2 - (carte2D_taille_texture.Y * laby.Size.Y * echelle) / 2);

                // Pour le déplacement de la caméra
                nearPlane = 0.01f;
                farPlane = 10000.0f;
                fieldOfView = 60.0f;
                aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width / (float)graphics.GraphicsDevice.Viewport.Height;
                Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(fieldOfView), aspectRatio, nearPlane, farPlane);

                // Souris
                yaw = 0;
                pitch = 0;

                clavier_prec = Keyboard.GetState();
                Mouse.SetPosition(graphics.GraphicsDevice.Viewport.Width / 2, graphics.GraphicsDevice.Viewport.Height / 2);
                souris_prec = Mouse.GetState();

                // Chrono
                chrono = 1;
                chrono_meilleur_score = 0;

                // Bonus
                geler_compteur = 0;
                changervitesse_compteur = 0;
                inverser_position = false;
                teleportation_aleatoire = false;
                inversertouche_compteur = 0;
                inversercamera_compteur = 0;
                changercamera_compteur = 0;
                inversercamera = false;
                changercamera = false;
                affichercarte2D_compteur = 0;
                affichercarte2D = false;
                cecite = false;
                cecite_compteur = 0;
                boussole_sortie = false;
                boussole_sortie_compteur = 0;
                compteur_message_bonus = 0;

                compteur_total = 0;

                // Temporisation
                tempo_load_largeur = ((tempo_load.Width / 2) * graphics.GraphicsDevice.Viewport.Width) / 800;
                tempo_load_hauteur = ((tempo_load.Height / 2) * graphics.GraphicsDevice.Viewport.Height) / 600;

                tempo_fixe_largeur = graphics.GraphicsDevice.Viewport.Width;
                tempo_fixe_hauteur = ((tempo_fixe.Height / 1) * graphics.GraphicsDevice.Viewport.Height) / 600;

                ia.CaseIntersection(); //Définis les cases du labyrinthe qui sont des intersections.
                ia.CaseImpasse(); //Définis les cases du labyrinthe qui sont des impasses.
                if(Config.active_mort_subite)
                    mortsubite = 60 * Config.min_mort_subite + Config.sec_mort_subite;
                facteur = 1.52196;

            }
            else
            {
                Config.pause = false;
                if (Config.modedejeu)
                {
                    if(musique_poursuite.IsPaused)
                        musique_poursuite.Resume();
                }
                musique_ambiance.Resume();
            }
            return base.Init();
        }
Ejemplo n.º 3
0
        public override void Update(GameTime gameTime)
        {
            float temps = (float)gameTime.ElapsedGameTime.TotalSeconds;

            Config.chrono = chronometre(chrono);

            clavier = Keyboard.GetState();
            souris = Mouse.GetState();
            Random rand = new Random();

            // Transition au début du jeu
            if (!transition_debut_finie && compteur_transition_debut > 0)
            {
                compteur_transition_debut -= temps;
                if (compteur_transition_debut < 0)
                    transition_debut_finie = true;
            }

            // Pause
            if (clavier.IsKeyDown(Keys.Escape) && !clavier_prec.IsKeyDown(Keys.Escape))
            {
                Config.pause = true;
                if (Config.modedejeu)
                {
                    if (musique_poursuite.IsPlaying)
                        musique_poursuite.Pause();
                }
                musique_ambiance.Pause();

                graphics.GraphicsDevice.RenderState.FogEnable = false;
                Gestion_Ecran.Goto_Ecran("Menu Principal");
                this.Shutdown();
            }

            // Triche
            Triche();

            if (triche && clavier.IsKeyDown(Keys.NumPad0))
            {
                // On charge le labyrinthe en vertices
                MazeMaterialBuilder materialBuilder = new MazeMaterialBuilder();
            }

            if (Config.modedejeu)
            {
                // Calcul de la distance joueur - chasseur
                distance_joueur_chasseur = Math.Sqrt(Math.Pow(chasseur.position.X * chasseur.Scale - joueur.position.X, 2) + Math.Pow(chasseur.position.Z * chasseur.Scale - joueur.position.Z, 2));
            }
            else
            {
                // Calcul de la distance joueur - scientifique
                distance_joueur_scientifique = Math.Sqrt(Math.Pow(scientifique.position.X * scientifique.Scale - joueur.position.X, 2) + Math.Pow(scientifique.position.Z * scientifique.Scale - joueur.position.Z, 2));
            }

            #region Fin du jeu

            // Gagné (trouvé la sortie)
            if ((Config.modedejeu && laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] == 3))
            {
                Config.cause_fin_jeu = "Vous avez trouvé la sortie !";
                Gestion_Ecran.Goto_Ecran("Succes");
                this.Shutdown();
            }
            // Le joueur touche le scientifique
            else if (!Config.modedejeu && (distance_joueur_scientifique < 1 || scientifique_touche))
            {
                scientifique_touche = true;
                compteur_animation_fin_scientifique -= temps;
                if (compteur_animation_fin_scientifique < 0)
                {
                    Config.cause_fin_jeu = "Vous avez trouvé le scientifique !";
                    Gestion_Ecran.Goto_Ecran("Succes");
                    this.Shutdown();
                }
            }

            // Perdu (attrapé par le chasseur)
            if ((Config.modedejeu && distance_joueur_chasseur < 1.5 && laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] != 1) || chasseur_touche)
            {
                joueur.vivant = false;
                chasseur_touche = true;
                compteur_animation_fin_chasseur -= temps;

                if (compteur_animation_fin_chasseur < 0.25 && !son_mort_unique)
                {
                    SoundBank.PlayCue(son_mort);
                    son_mort_unique = true;
                }
                if (compteur_animation_fin_chasseur < 0)
                {
                    chasseur_touche = false;
                    // Screen
                    Config.cause_fin_jeu = "Vous vous êtes fait attraper";
                    Gestion_Ecran.Goto_Ecran("Fail");
                    this.Shutdown();
                }
            }
            // Perdu (le scientifique a trouvé la sortie)
            else if (!Config.modedejeu && laby.sortie_position == scientifique.position_case_actuelle)
            {
                // Screen
                Config.cause_fin_jeu = "Le scientifique a réussi à s'échapper !";
                Gestion_Ecran.Goto_Ecran("Fail");
                this.Shutdown();
            }

            // Perdu (piques)
            if (joueur.position.Y < laby.joueur_position_initiale.Y - laby.CellSize.Y)
            {
                SoundBank.PlayCue(son_mort);
                Config.cause_fin_jeu = "Vous vous êtes fait empaler !";
                Gestion_Ecran.Goto_Ecran("Fail");
                this.Shutdown();
            }

            // Perdu (lasers)
            if (joueur.laser)
            {
                foreach (Pieges piege in laby.liste_pieges)
                {
                    if (piege.position_case == joueur.position_case_actuelle)
                    {
                        if (piege.direction_laser == "NS")
                        {
                            if (piege.position.X + 0.5 >= joueur.position.X && joueur.position.X >= piege.position.X - 0.5)
                            {
                                if (piege.hauteur_laser == laby.CellSize.Y / 2 && !joueur.baisse)
                                {
                                    SoundBank.PlayCue(son_mort);
                                    Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !";
                                    Gestion_Ecran.Goto_Ecran("Fail");
                                    this.Shutdown();
                                }
                                else if (piege.hauteur_laser == 0.5 && !joueur.saut)
                                {
                                    SoundBank.PlayCue(son_mort);
                                    Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !";
                                    Gestion_Ecran.Goto_Ecran("Fail");
                                    this.Shutdown();
                                }
                            }
                        }
                        else
                        {
                            if (piege.position.Z + 0.5 + laby.CellSize.Z / 2 >= joueur.position.Z && joueur.position.Z >= piege.position.Z - 0.5 + laby.CellSize.Z / 2)
                            {
                                if (piege.hauteur_laser == laby.CellSize.Y / 2 && !joueur.baisse)
                                {
                                    SoundBank.PlayCue(son_mort);
                                    Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !";
                                    Gestion_Ecran.Goto_Ecran("Fail");
                                    this.Shutdown();
                                }
                                else if (piege.hauteur_laser == 0.5 && !joueur.saut)
                                {
                                    SoundBank.PlayCue(son_mort);
                                    Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !";
                                    Gestion_Ecran.Goto_Ecran("Fail");
                                    this.Shutdown();
                                }
                            }
                        }
                    }
                }
            }
            #endregion

            // Zoom carte 2D
            if (clavier.IsKeyDown(Keys.PageUp))
                echelle += 0.01f;
            if (clavier.IsKeyDown(Keys.PageDown))
                echelle -= 0.01f;

            // Supprime tout le labyrinthe !
            if (triche && clavier.IsKeyDown(Keys.Delete))
            {
                if (materials != null)
                {
                    foreach (Material m in materials)
                    {
                        m.Dispose();
                    }
                    materials = null;
                }
            }

            if (triche && clavier.IsKeyDown(Keys.T) && !clavier_prec.IsKeyDown(Keys.T))
                TeleportationAleatoire();

            // Déplacer les informations sur le jeu
            if (triche && (clavier.IsKeyDown(Keys.A)))
            {
                // Déplacement de la carte 2D
                if (clavier.IsKeyDown(Keys.Left))
                    InfoTexteGauche -= 5;
                if (clavier.IsKeyDown(Keys.Right))
                    InfoTexteGauche += 5;
                if (clavier.IsKeyDown(Keys.Up))
                    InfoTexteHaut -= 5;
                if (clavier.IsKeyDown(Keys.Down))
                    InfoTexteHaut += 5;
            }

            // Déplacer la carte de l'IA
            if (triche && (clavier.IsKeyDown(Keys.Tab) || clavier.IsKeyDown(Keys.I)))
            {
                // Déplacement de la carte 2D
                if (clavier.IsKeyDown(Keys.Left))
                    BordGauche -= 5;
                if (clavier.IsKeyDown(Keys.Right))
                    BordGauche += 5;
                if (clavier.IsKeyDown(Keys.Up))
                    BordHaut -= 5;
                if (clavier.IsKeyDown(Keys.Down))
                    BordHaut += 5;
            }

            // Déplacer la carte 2D
            if (triche && clavier.IsKeyDown(Keys.E))
            {
                // Déplacement de la carte 2D
                if (clavier.IsKeyDown(Keys.Left))
                    BordGaucheTexture -= 5;
                if (clavier.IsKeyDown(Keys.Right))
                    BordGaucheTexture += 5;
                if (clavier.IsKeyDown(Keys.Up))
                    BordHautTexture -= 5;
                if (clavier.IsKeyDown(Keys.Down))
                    BordHautTexture += 5;
            }

            // Génére un nouveau labyrinthe
            if (triche && clavier.IsKeyDown(Keys.G))
                GenLaby();

            if (Config.modedejeu)
            {
                // Actualisation de l'IA
                if (chasseur.changement_de_case)
                    if (distance_joueur_chasseur < 4.6 || !Config.laby_algo)
                        ia.Update(joueur.position_case_actuelle, triche);
                    else
                        ia.UpdateChasseur(chasseur, triche, joueur);
                // Chasseur
                if (distance_joueur_chasseur > 1.5)
                {
                    disapply_mortsubite = false;
                    if (chasseur.animation != "walk7")
                    {
                        chasseur.skeleton_base.setAnimation("walk7");
                        chasseur.animation = "walk7";
                    }

                    if ((triche && !clavier.IsKeyDown(Keys.P)) || !triche)
                        chasseur.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche);
                }
                else
                {
                    vitesseIA(1.52196);
                    disapply_mortsubite = true;
                    if (chasseur.animation != "attack3")
                    {
                        chasseur.skeleton_base.setAnimation("attack3");
                        chasseur.animation = "attack3";
                    }
                }
            }
            else
            {

                /** Scientifique **/
                // Si le scientifique est bloqué
                if (!ia.ScienNonBloque(laby.sortie_position, scientifique.position_case_actuelle, joueur))
                {
                    ia.UpdateBis(scientifique, joueur);
                    if (scientifique.position_case_actuelle == ia.case_eloigne && distance_joueur_scientifique >= 1 && scientifique.estpasmort)
                    {
                        disapply_mortsubite = true;
                        vitesseIA(1.52196);
                        if (scientifique.animation != "freaked_out")
                        {
                            scientifique.skeleton_base.setAnimation("freaked_out");
                            scientifique.animation = "freaked_out";
                        }

                    }
                    else if (scientifique.position_case_actuelle == ia.case_eloigne && distance_joueur_scientifique < 1)
                    {
                        disapply_mortsubite = true;
                        vitesseIA(1.52196);
                        if (scientifique.animation != "invasion_ledgefall")
                        {
                            scientifique.skeleton_base.setAnimation("invasion_ledgefall");
                            scientifique.estpasmort = false;
                            scientifique.animation = "invasion_ledgefall";
                        }
                    }
                    else
                    {

                        if (distance_joueur_scientifique < 1)
                        {
                            disapply_mortsubite = true;
                            vitesseIA(1.52196);
                            if (scientifique.animation != "invasion_ledgefall")
                            {
                                scientifique.skeleton_base.setAnimation("invasion_ledgefall");
                                scientifique.estpasmort = false;
                                scientifique.animation = "invasion_ledgefall";
                            }
                        }
                        else if ((triche && !clavier.IsKeyDown(Keys.P) || !triche) && scientifique.estpasmort)
                        {
                            scientifique.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche);
                        }
                        if (scientifique.position_case_actuelle != joueur.position_case_actuelle && scientifique.animation != "walk_normal" && scientifique.estpasmort)
                        {
                            disapply_mortsubite = false;
                            scientifique.skeleton_base.setAnimation("walk_normal");
                            scientifique.animation = "walk_normal";
                        }
                    }
                }
                //Scientifique non bloqué recherche la sortie
                else
                {
                    if (scientifique.changement_de_case)
                        ia.UpdateScientifique2(scientifique, laby.sortie_position);
                    if (distance_joueur_scientifique < 1)
                    {
                        if (scientifique.animation != "invasion_ledgefall")
                        {
                            scientifique.skeleton_base.setAnimation("invasion_ledgefall");
                            scientifique.estpasmort = false;
                            scientifique.animation = "invasion_ledgefall";
                        }
                    }
                    else if (((triche && !clavier.IsKeyDown(Keys.P)) || !triche) || scientifique.estpasmort)
                    {
                        scientifique.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche);
                    }
                    if (scientifique.position_case_actuelle != joueur.position_case_actuelle && scientifique.animation != "walk_normal" && scientifique.estpasmort)
                    {
                        scientifique.skeleton_base.setAnimation("walk_normal");
                        scientifique.animation = "walk_normal";
                    }
                }

            }

            // Joueur
            joueur.Update(graphics.GraphicsDevice.Viewport, gameTime, Content, yaw, pitch, temps, laby, triche);

            // Place le joueur en temps réel sur la carte 2D
            for (int y = 0; y < laby.Size.Y; y++)
            {
                for (int x = 0; x < laby.Size.X; x++)
                {
                    if (laby.Carte[x, y] == 2)
                        laby.Carte[x, y] = 0;
                }
            }

            if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] == 0)
                laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] = 2;

            // Place le chasseur en temps réel sur la carte 2D
            for (int y = 0; y < laby.Size.Y; y++)
            {
                for (int x = 0; x < laby.Size.X; x++)
                {
                    if (laby.Carte[x, y] == 4)
                        laby.Carte[x, y] = 0;
                }
            }

            if (Config.modedejeu)
            {
                if (laby.Carte[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] == 0)
                    laby.Carte[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] = 4;
            }
            else
            {
                if (laby.Carte[(int)(scientifique.position.X * scientifique.Scale / laby.CellSize.X), (int)(scientifique.position.Z * scientifique.Scale / laby.CellSize.Z)] == 0)
                    laby.Carte[(int)(scientifique.position.X * scientifique.Scale / laby.CellSize.X), (int)(scientifique.position.Z * scientifique.Scale / laby.CellSize.Z)] = 4;

            }

            #region Bonus
            /*** Bonus ***/
            // Si le joueur est sur un bonus
            if (laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] == 5 && !joueur.bonus_actif)
            {
                // On localise ce bonus pour connaître ses cordonnées dans l'espace
                for (int i = 0; i < laby.liste_bonus.Count; i++)
                {
                    if (laby.liste_bonus[i].position_case_bonus == joueur.position_case_actuelle)
                    {
                        // On regarde si le joueur touche le bonus
                        distance_bonus_joueur = Math.Sqrt(Math.Pow(laby.liste_bonus[i].position_bonus.X - joueur.position.X, 2) + Math.Pow(laby.liste_bonus[i].position_bonus.Z - joueur.position.Z, 2) + Math.Pow(laby.liste_bonus[i].position_bonus.Y - (joueur.position.Y * 0.25), 2));
                        if (distance_bonus_joueur <= 0.5)
                        {
                            SoundBank.PlayCue("bonus");
                            SupprimerBonus(laby.liste_bonus[i]);
                            joueur.bonus_actif = true;
                        }
                    }
                }
            }

            // On ajoute un bonus si le joueur appui sur B
            if (clavier.IsKeyDown(Keys.B))
                NouveauBonus();

            // On supprimer tous les bonus si on appui sur Suppr
            if (clavier.IsKeyDown(Keys.Delete))
                SupprimerTousBonus();

            // Variables pour les bonus
            if (joueur.gel && geler_compteur < chrono)
                joueur.gel = false;

            if (joueur.vitesse != joueur.vitesse_initiale && changervitesse_compteur < chrono)
                joueur.vitesse = joueur.vitesse_initiale;

            if (joueur.inversertouches && inversertouche_compteur < chrono)
                joueur.inversertouches = false;

            if (inversercamera && inversercamera_compteur < chrono)
                inversercamera = false;

            if (changercamera && changercamera_compteur < chrono)
                changercamera = false;

            if (joueur.fil_ariane && fil_ariane_compteur < chrono)
            {
                joueur.fil_ariane = false;
                materials = materials_save;
            }
            if (affichercarte2D && affichercarte2D_compteur < chrono)
                affichercarte2D = false;

            if (cecite && cecite_compteur < chrono)
                cecite = false;
            else if (cecite_transparence_tmp < cecite_transparence)
                cecite_transparence_tmp++;

            if (boussole_sortie && boussole_sortie_compteur < chrono)
                boussole_sortie = false;

            if (compteur_message_bonus < 0)
                inverser_position = false;
            if (compteur_message_bonus < 0)
                teleportation_aleatoire = false;

            if (!joueur.gel && !joueur.inversertouches && !joueur.fil_ariane && (joueur.vitesse == joueur.vitesse_initiale) && !inversercamera
                && !changercamera && !affichercarte2D && !cecite && !boussole_sortie && !inverser_position && !teleportation_aleatoire)
            {
                joueur.bonus_actif = false;
            }
            #endregion

            // Chronomètre
            if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] != 3)
                chrono += (float)gameTime.ElapsedGameTime.TotalSeconds;
            else if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] == 3)
                chrono_meilleur_score = chrono;

            // Audio
            Audio.Update();

            compteur_son_ambiance_aleatoire -= temps;

            // Son ambiance aléatoire
            if (compteur_son_ambiance_aleatoire < 0)
            {
                if (son_ambiance_aleatoire.IsStopped)
                {
                    son_ambiance_aleatoire.Dispose();
                    son_ambiance_aleatoire = SoundBank.GetCue("son_ambiance_aleatoire");
                }
                if (son_ambiance_aleatoire.IsPrepared)
                    son_ambiance_aleatoire.Play();

                compteur_son_ambiance_aleatoire = rand.Next(10, 30);
            }

            // Son mort subite
            if (Config.active_mort_subite && ((chrono > Config.min_mort_subite * 60 + Config.sec_mort_subite) && !son_mort_subite_unique))
            {
                son_mort_subite.Play();
                son_mort_subite_unique = true;
            }

            // Volume du jeu
            if (triche)
            {
                Audio.GetCategory("Musiques").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_musiques);
                Audio.GetCategory("Sons").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_sons);

                // Réglage du volume des musiques
                if (clavier.IsKeyDown(Keys.PageDown) && aMAZEing_Escape.Properties.Settings.Default.volume_musiques > 0.1f)
                    aMAZEing_Escape.Properties.Settings.Default.volume_musiques -= 0.01f;
                else if (clavier.IsKeyDown(Keys.PageUp) && aMAZEing_Escape.Properties.Settings.Default.volume_musiques < 0.9f)
                    aMAZEing_Escape.Properties.Settings.Default.volume_musiques += 0.01f;

                // Réglage du volume des sons
                if (clavier.IsKeyDown(Keys.End) && aMAZEing_Escape.Properties.Settings.Default.volume_sons > 0.1f)
                    aMAZEing_Escape.Properties.Settings.Default.volume_sons -= 0.01f;
                else if (clavier.IsKeyDown(Keys.Home) && aMAZEing_Escape.Properties.Settings.Default.volume_sons < 0.9f)
                    aMAZEing_Escape.Properties.Settings.Default.volume_sons += 0.01f;
            }

            if (Config.modedejeu)
            {
                if (musique_ambiance.IsPaused)
                    musique_ambiance.Resume();
                if (musique_poursuite.IsPaused)
                    musique_poursuite.Resume();

                if (joueur.matrice_cout[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] < ray(laby.Size) && poursuite == false && !musique_poursuite.IsPlaying)
                {
                    musique_poursuite.Play();
                    poursuite = true;
                }
                else if (joueur.matrice_cout[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] > ray(laby.Size) && musique_poursuite.IsPlaying)
                {
                    // Stopper la musique
                    musique_poursuite.Stop(AudioStopOptions.AsAuthored);
                    musique_poursuite.Dispose();
                    musique_poursuite = SoundBank.GetCue("poursuite");
                    poursuite = false;
                }
            }

            // Changement de la caméra en fonction de la souris
            Vector2 position_souris = new Vector2(souris.X - souris_prec.X, souris.Y - souris_prec.Y);

            // pitch = rotation autour de l'axe des X | yaw = rotation autour de l'axe des Y

            if (inversercamera)
            {
                pitch += (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
                yaw -= (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
            }
            else
            {
                if (changercamera)
                {
                    yaw -= (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
                    pitch += (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
                }
                else
                {
                    pitch -= (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
                    yaw += (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50;
                }
            }

            yaw = MathHelper.Clamp(yaw, MathHelper.ToRadians(-89.9f), MathHelper.ToRadians(89.9f));

            Mouse.SetPosition(graphics.GraphicsDevice.Viewport.Width / 2, graphics.GraphicsDevice.Viewport.Height / 2);

            if (Config.modedejeu)
            {
                // Animations du chasseur
                chasseur.skeleton_base.update(gameTime);
            }

            else
            {
                // Animation du scientifique
                scientifique.skeleton_base.update(gameTime);
            }

            Vue = Matrix.CreateLookAt(joueur.position, joueur.cible, Vector3.Up);
            clavier_prec = Keyboard.GetState();

            // On rejoue les sons stoppé
            if (musique_ambiance.IsPaused)
                musique_ambiance.Resume();
            if (Config.modedejeu && musique_poursuite.IsPaused)
                musique_poursuite.Resume();

            if (Config.active_mort_subite && (chrono >= mortsubite && !disapply_mortsubite))
                if (Config.index_difficulte == 2) // dificile
                    facteur = facteur + 0.01;
                else if (Config.index_difficulte == 1) // moyen
                    facteur = facteur + 0.005;
                else // facile
                    facteur = facteur + 0.001;

            vitesseIA(facteur);

            base.Update(gameTime);
        }