Beispiel #1
0
 // Effecteur ASPIRER
 public void Aspirer(int position, Environnement env)
 {
     // Console.WriteLine("Effecteur aspirer");
     // Notifier l'environnement qu'on aspire la pièce X
     _message = Tuple.Create(Action.ASPIRER, position);
     Environnement.FileAction.Enqueue(_message);
 }
Beispiel #2
0
 // Effecteur RAMASSER
 public void Ramasser(int position, Environnement env)
 {
     // Console.WriteLine("Effecteur ramasser");
     // Notifier l'environnement qu'on ramasse un bijou dans la pièce X
     _message = Tuple.Create(Action.RAMASSER, position);
     Environnement.FileAction.Enqueue(_message);
 }
Beispiel #3
0
        private const double Seuil = 1;          // seuil de variation pour déclencher une modification de nbaction

        /* Constructeur a utiliser pour placer un agent dans un environnement*/
        public Agent(Environnement env, AlgoExploration exploration)
        {
            _environnement = env;

            switch (exploration)
            {
            case AlgoExploration.LARGEUR:
                _exploration = new RechercheEnLargeur();
                break;

            case AlgoExploration.ASTAR:
                _exploration = new Astar();
                break;
            }
        }
        private static void AfficherCarte(int[] carte, Environnement env, Agent agent)
        {
            Console.SetCursorPosition(0, 2);

            int i   = 0;
            int pos = agent.GetPosition();

            foreach (int piece in carte)
            {
                if ((i > 0) && (i % 10 == 0))
                {
                    Console.Write("\n");
                }
                if (i == pos)
                {
                    Console.Write("[X]");
                }
                else
                {
                    Console.Write("[" + piece + "]");
                }
                i++;
            }
            Console.Write("\nnombre de poussieres : " + carte.Count(j => j == 1) + "\n"
                          + "nombre de bijoux : " + carte.Count(j => j == 2) + "\n"
                          + "nombre de pousiere et bijoux : " + carte.Count(j => j == 3) + "\n"
                          + "mesure d'evaluation : " + env.GetMesurePerformance() + "\n"
                          + "nbAction : ");
            if (agent.GetNbAction() < 10)
            {
                Console.Write("0" + agent.GetNbAction());
            }
            else
            {
                Console.Write(agent.GetNbAction());
            }
            Console.SetCursorPosition(0, 20);
        }
Beispiel #5
0
 public int ObserverPerformance(Environnement env)
 {
     return(env.GetMesurePerformance());
 }
Beispiel #6
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();
        }