//метод таймера добавления машин на сцену private void AddCarsOnScene(Object myObject, EventArgs myEventArgs) { addCarTimer.Stop(); addCarTimer.Interval = GetInterval(); TryFunc<Vertex, IEnumerable<Edge<Vertex>>> tryGetPath; Random rnd = new Random(); int needParking = rnd.Next(3); int type = rnd.Next(4); int parkingPeriod = rnd.Next(5, 20) * 4; float tarif; TypeOfCar typeOfCar; if (type != 1) { typeOfCar = TypeOfCar.Automobile; tarif = settings.TarifAuto; } else { typeOfCar = TypeOfCar.Lorry; tarif = settings.TarifLorry; } Car car = new Car(typeOfCar, 1.0f); Vertex finishVertex; IEnumerable<Edge<Vertex>> path; if (needParking == 1) { tryGetPath = map.Graph.ShortestPathsDijkstra(e => { if (e.Target == map.EntranceVertex) return 999; else return 1; }, map.StartVertex); // метод поиска кратчайшего пути от начальной вершины графа к парковочному месту (Алгоритм Дейкстры) ParkingPlace place = FindParkingPlace(typeOfCar); if (place == null) finishVertex = map.EndVertex; else { finishVertex = place.VertexOnGraph; place.Take(car, new TimeSpan(0, 0, parkingPeriod)); MoneyInCash += tarif * parkingPeriod; } } else { tryGetPath = map.Graph.ShortestPathsDijkstra(e => 1, map.StartVertex); // метод поиска кратчайшего пути от начальной вершины графа к конечной вершине (Алгоритм Дейкстры) finishVertex = map.EndVertex; } if (tryGetPath(finishVertex, out path)) { car.Path = path; } cars.Add(car); addCarTimer.Start(); }
//занять место на заданный период времени public void Take(Car car, TimeSpan period) { Car = car; ParkingPeriod = period; }
private bool BelongsArea(Car c, Rectangle r) { if (c.coords.X >= r.Left && c.coords.X <= r.Right && c.coords.Y >= r.Top && c.coords.Y <= r.Bottom) return true; return false; }
public bool Remove(string manufacturer, string model) { Car car = data.Where(c => c.Manufacturer == manufacturer).FirstOrDefault(c => c.Model == model); return data.Remove(car); }