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; }