Exemplo n.º 1
1
        //метод таймера добавления машин на сцену
        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();
        }
Exemplo n.º 2
0
 //занять место на заданный период времени
 public void Take(Car car, TimeSpan period)
 {
     Car = car;
     ParkingPeriod = period;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 public bool Remove(string manufacturer, string model)
 {
     Car car = data.Where(c => c.Manufacturer == manufacturer).FirstOrDefault(c => c.Model == model);
     return data.Remove(car);
 }