public TrafficLight(string label, StreetCross streetCross, String direction, int redTime, int greenTime, int lookingDistance, bool isGreenOn)
 {
     Label = label;
     ChangeLights(isGreenOn);
     _streetCross          = streetCross;
     Direction             = direction;
     RedTime               = redTime;
     GreenTime             = greenTime;
     CycleTime             = redTime + greenTime;
     LookingDistance       = lookingDistance;
     CarsInLookingDistance = new List <Car>();
     TotalWaitingCars      = new List <Car>();
 }
Beispiel #2
0
 public void CreateStreetCrossWeb()
 {
     _streetCrossWeb = new StreetCross[_numberOfColumns, _numberOfColumns];
     for (int i = 0; i < _numberOfColumns; i++)
     {
         for (int j = 0; j < _numberOfColumns; j++)
         {
             string northLabel = $"{i}_{j}_north";
             string eastLabel  = $"{i}_{j}_east";
             _streetCrossWeb[i, j] = new StreetCross(_decideTime);
             _streetCrossWeb[i, j].NorthernTrafficLight = new TrafficLight(northLabel, _streetCrossWeb[i, j], "north", _timeRedGreen, _timeRedGreen, _lookingDistance, true);
             _streetCrossWeb[i, j].EasternTrafficLight  = new TrafficLight(eastLabel, _streetCrossWeb[i, j], "east", _timeRedGreen, _timeRedGreen, _lookingDistance, false);
             _streetCrossWeb[i, j].RefreshTrafficLights();
             AddCars(_streetCrossWeb[i, j].NorthernTrafficLight, _numberOfCarsNorth);
             AddCars(_streetCrossWeb[i, j].EasternTrafficLight, _numberOfCarsEast);
         }
     }
 }
Beispiel #3
0
        public void HandleStreetCross(StreetCross streetCross)
        {
            foreach (var trafficLight in streetCross.TrafficLights)
            {
                trafficLight.CheckCarsInLookingDistance();
                Console.WriteLine($"[{trafficLight.Direction}] Number of total waiting cars: {trafficLight.TotalWaitingCars.Count}");
                Console.WriteLine($"[{trafficLight.Direction}] Number of cars in looking distance: {trafficLight.CarsInLookingDistance.Count}");
                Console.WriteLine($"[{trafficLight.Direction}] Green time: {trafficLight.GreenTime}");
                Console.WriteLine($"[{trafficLight.Direction}] Red Time: {trafficLight.RedTime}");


                trafficLight.CheckLightChange();
                if (trafficLight.IsGreenOn)
                {
                    trafficLight.RemoveCar();
                }
            }

            if (_timeInSeconds % (streetCross.DecideTime) == 0)
            {
                switch (streetCross.CheckRatio())
                {
                case 1:
                    Console.WriteLine($"Zwiekszamy zielone w {streetCross.TrafficLights[0].Direction}");
                    streetCross.TrafficLights[0].IncreaseGreenTime();
                    streetCross.TrafficLights[1].IncreaseRedTime();
                    break;

                case -1:
                    Console.WriteLine($"Zwiekszamy zielone w {streetCross.TrafficLights[1].Direction}");
                    streetCross.TrafficLights[1].IncreaseGreenTime();
                    streetCross.TrafficLights[0].IncreaseRedTime();
                    break;

                default:
                    Console.WriteLine("Nic sie nie zmienilo.");
                    break;
                }
            }
        }