예제 #1
0
        public void simu(int id, int idVoiture, int[][] classement, Mutex sem)
        {
            //initialisation des variables

            Random  rand    = new Random();
            Circuit circuit = new Circuit();

            Console.WriteLine("initialisation du sémaphore");

            Console.WriteLine("initialisation de la voiture " + id);
            Voiture voiture = new Voiture(id, idVoiture, 2, 0);

            Console.WriteLine("lancement de la course");
            Course(7, voiture, sem, classement);
        }
예제 #2
0
        /** simule le deroulement de l'entierete de la course
         *
         * @param int tours          le nombre de tours que comporte la course
         * @param voiture* mavoiture pointeur vers l'emplacement memoire de la voiture
         *                           simulee par le processus
         * @param Mutex sem mutex qui permet de synchroniser les données
         *
         */
        public void Course(int tours, Voiture maVoiture, Mutex sem, int[][] classement)
        {
            int temps1 = 0;
            int temps2 = -1;

            maVoiture.tours += 1;
            do
            {
                //Console.WriteLine("\ntour : " + tours);
                //effectue un tour puis incremente le temps total que la voiture aura passe en course
                temps1  = tourCourse(maVoiture, maVoiture.tours, tours, sem, classement);
                temps2 += temps1;

                if (temps1 == 0)
                {
                    maVoiture.Ready = -1;
                    return;
                }

                maVoiture.tours += 1;

                //verifie si la voiture a fait un meilleur temps que ce qu'elle avait precedemment fait
                if (maVoiture.meilleurTemps > temps1 || maVoiture.meilleurTemps == 0)
                {
                    maVoiture.meilleurTemps = temps1;        //sauvegarde la valeur en memoire partagee
                    if (!maVoiture.changeOrdre)
                    {
                        maVoiture.changeOrdre = true;          //indique que le temps de la voiture a changeOrdre
                    }
                }
                //Console.WriteLine("\ntemps du tour: " + temps1 +"| Voiture : "+ maVoiture.Id);
                if (maVoiture.tours > tours)
                {
                    classement[maVoiture.Id][5] = 0;
                }
            } while (maVoiture.tours < tours && temps1 != 0 || maVoiture.changeOrdre);
            maVoiture.Ready             = -1;
            classement[maVoiture.Id][5] = 0;
        }
예제 #3
0
        public void essaiLibreQuali(int chrono, Voiture maVoiture, Mutex sem, int[][] classement)
        {
            int temps1 = 0;
            int temps2 = 0;

            maVoiture.tours += 1;
            do
            {
                temps1  = tour(maVoiture, maVoiture.tours, sem, classement);
                temps2 += temps1;

                if (temps1 == 0)
                {
                    maVoiture.Ready = -1;
                    return;
                }
                maVoiture.tours += 1;

                //verifie si la voiture a fait un meilleur temps que ce qu'elle avait precedemment fait
                if (maVoiture.meilleurTemps > temps1 || maVoiture.meilleurTemps == 0)
                {
                    maVoiture.meilleurTemps = temps1;        //sauvegarde la valeur en memoire partagee
                    if (!maVoiture.changeOrdre)
                    {
                        maVoiture.changeOrdre = true;          //indique que le temps de la voiture a changeOrdre
                    }
                }

                Console.WriteLine("\ntemps du tour: " + temps1 + "| Voiture : " + maVoiture.idVoiture);
                if (maVoiture.tours > 2500)
                {
                    classement[maVoiture.Id][5] = 0;
                }
            } while (temps2 < chrono && temps1 != 0);
            maVoiture.Ready             = -1;
            classement[maVoiture.Id][5] = 0;
        }
예제 #4
0
 /** remets les secteurs de la voiture a zero.  Cela permet de simuler la fin d'un tour
  *   sur le circuit
  *
  * @param Voiture maVoiture remet à zero les temps de secteur de la voiture
  *
  */
 void refreshSecteurs(Voiture maVoiture)
 {
     maVoiture.tempSecteur1 = 0;
     maVoiture.tempSecteur2 = 0;
     maVoiture.tempSecteur3 = 0;
 }