Пример #1
0
 public int[] ObserverCarte(Environnement env)
 {
     return(env.GetCarte());
 }
        public static void Main(string[] args)
        {
            // Instanciation du programme
            Program prog = new Program();

            // Touche mettant fin au programme
            const ConsoleKey exitKey = ConsoleKey.Escape;

            // Fréquences de rafraichissement console et d'apparition des poussières et bijoux
            const int    fps = 60;
            const double frequencePoussiereFrame = 0.12;
            const double frequenceBijouxFrame    = 0.02;

            //choix de l'agloritme exploration : ASTAR | LARGEUR
            const AlgoExploration algoExp = AlgoExploration.ASTAR;

            //variables temporelles pour le rafraichissement (delta time = time - time2)
            long time = time = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
            long time2;

            //variable pour stocker la grille a afficher
            int[] terrainOld;

            //variable seed aléatoire
            Random rand = new Random();

            //création de l'environnement et de son thread dédié
            Environnement env       = new Environnement();
            Thread        threadEnv = new Thread(env.Lancer);

            //création de l'agent dans l'environnement et de son thread dédié
            Agent  agent       = new Agent(env, algoExp);
            Thread threadAgent = new Thread(agent.Lancer);

            //démarrage du thread environnement et agent
            threadEnv.Start();
            Console.WriteLine("thread principal : démarrage du thread environnement");

            //attente du démarrage du thread environnement
            while (!threadEnv.IsAlive)
            {
                ;
            }

            threadAgent.Start();
            Console.WriteLine("thread principal : démarrage du thread agent");

            //attente du démarrage du thread agent
            while (!threadAgent.IsAlive)
            {
                ;
            }

            //on charge le terrain vide
            terrainOld = env.GetCarte();
            AfficherCarte(terrainOld, env, agent);

            //cache le curseur
            Console.CursorVisible = false;

            //boucle principale du main
            terrainOld = new int[100];
            while (!(Console.KeyAvailable && Console.ReadKey(true).Key == exitKey))
            {
                time2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
                if (time2 - time > (1000 / fps))
                {
                    if (frequencePoussiereFrame > rand.NextDouble())
                    {
                        env.EventCreerPoussiere();
                    }
                    else if (frequenceBijouxFrame > rand.NextDouble())
                    {
                        env.EventCreerBijoux();
                    }

                    AfficherCarte(env.GetCarte(), env, agent);
                    time = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
                }
            }

            //arret du thread environnement de par lui même
            env.Arret();

            //attente de la fin du thread environnement
            threadEnv.Join();
            Console.WriteLine("thread principal : thread environnement c'est terminé");
            //arret du thread agent de par lui même
            agent.Arret();

            //attente de la fin du thread environnement
            threadEnv.Join();
            Console.WriteLine("thread principal : thread environnement c'est terminé");

            Console.ReadKey();
        }