private int adapterVitesse(VoitureAgent voiture)
        {
            double distance = 0;
            string apparition = voiture.apparitionToString();
            int left = voiture.CoordonneesApparition[0];
            int top = voiture.CoordonneesApparition[1];
            //voiture.Freine = 1;

            foreach (VoitureAgent uneVoiture in voitureList)
            {
                if (uneVoiture != voiture)
                {
                    //on va déterminer si une voiture devant est arrêtée

                    //if (uneVoiture.apparitionToString() == voiture.apparitionToString() && voiture.directionActuelle() == uneVoiture.directionActuelle())
                    if (voiture.directionActuelle() == uneVoiture.directionActuelle())
                    {
                        /*
                        if (uneVoiture.apparitionToString() == "left")
                            distance = uneVoiture.CoordonneesApparition[0] - (voiture.CoordonneesApparition[0] + voiture.Width);
                        else if (uneVoiture.apparitionToString() == "right")
                            distance = voiture.CoordonneesApparition[0] - (uneVoiture.CoordonneesApparition[0] + uneVoiture.Width);
                        else if (uneVoiture.apparitionToString() == "bot")
                            distance = voiture.CoordonneesApparition[1] - (uneVoiture.CoordonneesApparition[1] + uneVoiture.Height);
                        else if (uneVoiture.apparitionToString() == "top")
                            distance = uneVoiture.CoordonneesApparition[1] - (voiture.CoordonneesApparition[1] + voiture.Height);
                        */

                        if (uneVoiture.directionActuelle() == "right")
                            distance = uneVoiture.CoordonneesApparition[0] - (voiture.CoordonneesApparition[0] + voiture.Width);
                        else if (uneVoiture.directionActuelle() == "left")
                            distance = voiture.CoordonneesApparition[0] - (uneVoiture.CoordonneesApparition[0] + uneVoiture.Width);
                        else if (uneVoiture.directionActuelle() == "top")
                            distance = voiture.CoordonneesApparition[1] - (uneVoiture.CoordonneesApparition[1] + uneVoiture.Height);
                        else if (uneVoiture.directionActuelle() == "bot")
                            distance = uneVoiture.CoordonneesApparition[1] - (voiture.CoordonneesApparition[1] + voiture.Height);

                        if (distance > -5 && distance < 15)
                        {
                            return 4;
                        }
                        else if (distance >= 15 && distance < 25)
                            return 3;
                        else if (distance >= 25 && distance < 35)
                        {
                            return 2;
                        }
                    }
                }

            }

            return 1;
        }
 private void supprimerVoiture(VoitureAgent voiture)
 {
     if (voiture.CoordonneesApparition[0] > 850 || voiture.CoordonneesApparition[0] < -80 || voiture.CoordonneesApparition[1] < -80 || voiture.CoordonneesApparition[1] > 850)
     {
         voitureList.Remove(voiture);
     }
 }
 private void DrawVoiture(VoitureAgent voiture)
 {
     Rectangle body = new Rectangle();
     body.Stroke = couleurList[voiture.IndexCouleurvoiture];
     body.Fill = couleurList[voiture.IndexCouleurvoiture];
     body.Width = voiture.Width;
     body.Height = voiture.Height;
     routeCanvas.Children.Add(body);
     Canvas.SetLeft(body, voiture.CoordonneesApparition[0]);
     Canvas.SetTop(body, voiture.CoordonneesApparition[1]);
 }
        private Boolean isStopped(VoitureAgent voiture)
        {
            double distance = 0;
            string apparition = voiture.apparitionToString();
            int left = voiture.CoordonneesApparition[0];
            int top = voiture.CoordonneesApparition[1];
            //voiture.Freine = 1;
            double left2 = voiture.CoordonneesApparition[0] + voiture.Width;
            double top2 =voiture.CoordonneesApparition[1] + voiture.Height;

            int _left;
            int _top;

            double _left2;
            double _top2;

            // on vérifie si la voiture est au feu rouge qui la concerne
            if (apparition == "left" && (feuG.Fill == Brushes.Red || feuG.Fill == Brushes.Orange) && left >= 323 && left <= 340)
                return true;

            if (apparition == "right" && (feuD.Fill == Brushes.Red || feuD.Fill == Brushes.Orange) && left >= 481 && left <= 495)
                return true;

            if (apparition == "bot" && (feuB.Fill == Brushes.Red || feuB.Fill == Brushes.Orange) && top >= 485 && top <= 499)
                return true;

            if (apparition == "top" && (feuH.Fill == Brushes.Red || feuH.Fill == Brushes.Orange) && top >= 326 && top <= 341)
                return true;
            //

            foreach (VoitureAgent uneVoiture in voitureList)
            {
                if (uneVoiture != voiture)
                {
                    //on va déterminer si une voiture devant est arrêtée

                    /*if (uneVoiture.Stopped && uneVoiture.apparitionToString() == voiture.apparitionToString())
                    {

                        if (uneVoiture.apparitionToString() == "left")
                            distance = uneVoiture.CoordonneesApparition[0] - (voiture.CoordonneesApparition[0] + voiture.Width);
                        else if (uneVoiture.apparitionToString() == "right")
                            distance = voiture.CoordonneesApparition[0] - (uneVoiture.CoordonneesApparition[0] + uneVoiture.Width);
                        else if (uneVoiture.apparitionToString() == "bot")
                            distance = voiture.CoordonneesApparition[1] - (uneVoiture.CoordonneesApparition[1] + uneVoiture.Height);
                        else if (uneVoiture.apparitionToString() == "top")
                            distance = uneVoiture.CoordonneesApparition[1] - (voiture.CoordonneesApparition[1] + voiture.Height);

                        if (distance < distanceSecurite && distance > 0)
                            return true;

                    }*/
                    if(uneVoiture.Stopped && voiture.directionActuelle() == uneVoiture.directionActuelle())
                    {

                        if (uneVoiture.directionActuelle() == "right")
                            distance = uneVoiture.CoordonneesApparition[0] - (voiture.CoordonneesApparition[0] + voiture.Width);
                        else if (uneVoiture.directionActuelle() == "left")
                            distance = voiture.CoordonneesApparition[0] - (uneVoiture.CoordonneesApparition[0] + uneVoiture.Width);
                        else if (uneVoiture.directionActuelle() == "top")
                            distance = voiture.CoordonneesApparition[1] - (uneVoiture.CoordonneesApparition[1] + uneVoiture.Height);
                        else if (uneVoiture.directionActuelle() == "bot")
                            distance = uneVoiture.CoordonneesApparition[1] - (voiture.CoordonneesApparition[1] + voiture.Height);

                        if (distance < distanceSecurite && distance > 0)
                            return true;

                    }

                    // on va déterminer s'il faut laisser la priorité aux voitures venant d'en face
                    if (voiture.apparitionToString() == "left")
                        distance = uneVoiture.CoordonneesApparition[0] - (voiture.CoordonneesApparition[0] + voiture.Width);
                    else if (voiture.apparitionToString() == "right")
                        distance = voiture.CoordonneesApparition[0] - (uneVoiture.CoordonneesApparition[0] + uneVoiture.Width);
                    else if (voiture.apparitionToString() == "bot")
                        distance = voiture.CoordonneesApparition[1] - (uneVoiture.CoordonneesApparition[1] + uneVoiture.Height);
                    else if (voiture.apparitionToString() == "top")
                        distance = uneVoiture.CoordonneesApparition[1] - (voiture.CoordonneesApparition[1] + voiture.Height);

                    //fonctionnel !!  if (!uneVoiture.Turned && !uneVoiture.Stopped)

                    if (voiture.apparitionToString() == "left" && voiture.Direction == "top" && uneVoiture.apparitionToString() == "right" && voiture.timeToTurn() && distance < 70 && distance > -40 && feuD.Fill == Brushes.GreenYellow)
                            return true;
                    if (voiture.apparitionToString() == "right" && voiture.Direction == "bot" && uneVoiture.apparitionToString() == "left" && voiture.timeToTurn() && distance < 70 && distance > -40 && feuG.Fill == Brushes.GreenYellow)
                            return true;
                    if (voiture.apparitionToString() == "bot" && voiture.Direction == "left" && uneVoiture.apparitionToString() == "top" && voiture.timeToTurn() && distance < 70 && distance > -40 && feuH.Fill == Brushes.GreenYellow)
                            return true;
                    if (voiture.apparitionToString() == "top" && voiture.Direction == "right" && uneVoiture.apparitionToString() == "bot" && voiture.timeToTurn() && distance < 70 && distance > -40 && feuB.Fill == Brushes.GreenYellow)
                            return true;
                    /*
                    if (voiture.apparitionToString() == "left" && voiture.Direction == "top" && uneVoiture.apparitionToString() == "right" && left == 370 && distance < 60 && distance > -40)
                        return true;
                    if (voiture.apparitionToString() == "right" && voiture.Direction == "bot" && uneVoiture.apparitionToString() == "left" && left == 300 && distance < 60 && distance > -40)
                        return true;
                    if (voiture.apparitionToString() == "bot" && voiture.Direction == "left" && uneVoiture.apparitionToString() == "top" && top == 300 && distance < 60 && distance > -40)
                        return true;
                    if (voiture.apparitionToString() == "top" && voiture.Direction == "right" && uneVoiture.apparitionToString() == "bot" && top == 370 && distance < 60 && distance > -40)
                        return true;*/

                    _left = uneVoiture.CoordonneesApparition[0];
                    _left2 = uneVoiture.CoordonneesApparition[0] + uneVoiture.Width;

                    _top = uneVoiture.CoordonneesApparition[1];
                    _top2 = uneVoiture.CoordonneesApparition[1] + uneVoiture.Height;

                    // on va déterminer si c'est le bordel dans l'intersectione
                        if (voiture.directionActuelle() == "left")
                        {
                            distance = left - _left2;
                        }
                        else if (voiture.directionActuelle() == "right")
                        {
                            distance = _left - left2;
                        }
                        else if (voiture.directionActuelle() == "top")
                        {
                            distance = top - _top2;
                        }
                        else if (voiture.directionActuelle() == "bot")
                        {
                            distance = _top - top2;
                        }

                        if (voiture.directionActuelle() == "top" || voiture.directionActuelle() == "bot")
                        {
                            if (!(left2 < _left || left > _left2))
                            {
                                if (distance < 8 && distance > 0)
                                    return true;
                            }
                        }else{
                            if (!(top2 < _top || top > _top2))
                            {
                                if (distance < 8 && distance > 0)
                                    return true;
                            }
                        }

                    /*
                        if (uneVoiture.Turned && !voiture.Turned)
                        {
                            if (voiture.directionActuelle() == "left" && voiture.Direction == "top")
                            {
                                if (top - _top2 < 10)
                                    return false;
                            }
                            else if (voiture.directionActuelle() == "right" && voiture.Direction == "bot")
                            {
                                if (_top - top2 < 10)
                                    return false;
                            }
                            else if (voiture.directionActuelle() == "top" && voiture.Direction == "left")
                            {
                                if (left - _left2 < 10)
                                    return false;
                            }
                            else if (voiture.directionActuelle() == "bot" && voiture.Direction == "right")
                            {
                                if (_left - left2 < 10)
                                    return false;
                            }
                        }*/
                        //if(distance)

                }
            }

            //si aucune raison n'implique l'arret de la voiture, elle ne s'arrête pas...
            return false;
        }
        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            Boolean risque = false;
            int apparition;
            secondeCanvas++;
            if(secondeCanvas % circulation == 0){

                apparition = randomGenerator.Next(4);

                VoitureAgent uneVoiture = new VoitureAgent(apparition);

                if (voitureList.Count != 0 && circulation == 40)
                {
                    try
                    {
                        if (uneVoiture.apparitionToString() == "left" && lastLeft.Direction == "top" && uneVoiture.Direction == "top" && lastLeft != null)
                            risque = true;
                        if (uneVoiture.apparitionToString() == "right" && lastRight.Direction == "bot" && uneVoiture.Direction == "bot" && lastRight != null)
                            risque = true;
                        if (uneVoiture.apparitionToString() == "top" && lastTop.Direction == "right" && uneVoiture.Direction == "right" && lastTop != null)
                            risque = true;
                        if (uneVoiture.apparitionToString() == "bot" && lastBot.Direction == "left" && uneVoiture.Direction == "left" && lastBot != null)
                            risque = true;
                    }
                    catch
                    {

                    }

                }
                //Console.WriteLine(uneVoiture.Direction);
                if (!risque)
                {

                    if (!bouchon(uneVoiture.apparitionToString()))
                    {
                        voitureList.Add(uneVoiture);
                        DrawVoiture(uneVoiture);

                        if (uneVoiture.apparitionToString() == "left")
                            lastLeft = uneVoiture;
                        if (uneVoiture.apparitionToString() == "right")
                            lastRight = uneVoiture;
                        if (uneVoiture.apparitionToString() == "top")
                            lastTop = uneVoiture;
                        if (uneVoiture.apparitionToString() == "bot")
                            lastBot = uneVoiture;

                        lastApparition = uneVoiture.CoordonneesApparition[2];
                        nbVoiture_Total.Content = Convert.ToInt32(nbVoiture_Total.Content) + 1;
                    }else
                        Console.WriteLine("bouchon sur la voie de " + uneVoiture.apparitionToString());
                }
                else
                    Console.WriteLine("Une voiture n'est pas apparue");

            }
            updateVoitures();
            drawVoitures();

            nbVoiture.Content = voitureList.Count;
        }