private ZoneMap GenerateZones(ZoneMap zones) { for (int x = 0; x < _cityWidth; x++) { for (int y = 0; y < _cityHeight; y++) { int shiftedX = x + 2; int shiftedY = y + 2; if (x % 4 == 0 || y % 4 == 0) { if (x % 4 == 0 && y % 4 == 0) { zones.Map[x, y] = Zone.Intersection; } else { zones.Map[x, y] = Zone.Road; } } //Leave center of blocks Vacant else if (shiftedX % 4 == 0 && shiftedY % 4 == 0) { zones.Map[x, y] = Zone.Vacant; } else { //If the percent from center is greater than 75% it will always be a house double rng = _rand.Next(75); rng = rng / 100; //Calculate maximum distance from center of map var maxXSquared = _cityWidth / 2; var maxYSquared = _cityHeight / 2; //Calculated current position relative to center of map var xSquared = x - maxXSquared; var ySquared = y - maxYSquared; //Square max value maxXSquared = maxXSquared * maxXSquared; maxYSquared = maxYSquared * maxYSquared; //Square current positon xSquared = xSquared * xSquared; ySquared = ySquared * ySquared; //Calculate percent from center of the map var distanceFromCenter = Math.Sqrt(xSquared + ySquared); var percentFromCenter = distanceFromCenter / Math.Sqrt(maxXSquared + maxYSquared); if (rng < percentFromCenter) { zones.Map[x, y] = Zone.Residential; } else { zones.Map[x, y] = Zone.Work; } } } } return(zones); }
public City(StartingValues startValues) { storagePathPeople = startValues.StoragePath; storagePathMap = startValues.StoragePathMap; mManager = new TrafficMutator(); _budget = startValues.Budget; _traffictCycleTime = startValues.TrafficLightCycleTimeDefault; _cityHeight = startValues.MapHeight; _cityWidth = startValues.MapWidth; _population = startValues.Population; _zoning = new ZoneMap(_cityWidth,_cityHeight); LiveMap = new ITile[_cityWidth, _cityHeight]; TravelTimes = new int[_cityWidth, _cityHeight]; if (File.Exists(storagePathPeople)) { //GeneratePeople(); LoadPeopleFromFile(); } else { _zoning = GenerateZones(_zoning); LiveMap = GenerateLiveMap(LiveMap); GenerateTravelTimeHelper(); GeneratePeople(); } PrintCity(); //The larger the number the more accurate the final prediction while (mManager.GetNumberOfCyclesSinceLastKeptChange() < 200000) { Tick(); } Console.Out.WriteLine("The ideal intersection timing for this city is... [Measured in ticks]"); PrintFinalOutput(); }
public City(StartingValues startValues) { storagePathPeople = startValues.StoragePath; storagePathMap = startValues.StoragePathMap; mManager = new TrafficMutator(); _budget = startValues.Budget; _traffictCycleTime = startValues.TrafficLightCycleTimeDefault; _cityHeight = startValues.MapHeight; _cityWidth = startValues.MapWidth; _population = startValues.Population; _zoning = new ZoneMap(_cityWidth, _cityHeight); LiveMap = new ITile[_cityWidth, _cityHeight]; TravelTimes = new int[_cityWidth, _cityHeight]; if (File.Exists(storagePathPeople)) { //GeneratePeople(); LoadPeopleFromFile(); } else { _zoning = GenerateZones(_zoning); LiveMap = GenerateLiveMap(LiveMap); GenerateTravelTimeHelper(); GeneratePeople(); } PrintCity(); //The larger the number the more accurate the final prediction while (mManager.GetNumberOfCyclesSinceLastKeptChange() < 200000) { Tick(); } Console.Out.WriteLine("The ideal intersection timing for this city is... [Measured in ticks]"); PrintFinalOutput(); }
private ZoneMap GenerateZones(ZoneMap zones) { for (int x = 0; x < _cityWidth; x++) { for (int y = 0; y < _cityHeight; y++) { int shiftedX = x + 2; int shiftedY = y + 2; if (x%4 == 0|| y%4 == 0) { if (x%4 == 0 && y%4 == 0) { zones.Map[x, y] = Zone.Intersection; } else { zones.Map[x, y] = Zone.Road; } } //Leave center of blocks Vacant else if (shiftedX%4 == 0 && shiftedY%4 == 0) { zones.Map[x, y] = Zone.Vacant; } else { //If the percent from center is greater than 75% it will always be a house double rng = _rand.Next(75); rng = rng/100; //Calculate maximum distance from center of map var maxXSquared = _cityWidth/2; var maxYSquared = _cityHeight/2; //Calculated current position relative to center of map var xSquared = x - maxXSquared; var ySquared = y - maxYSquared; //Square max value maxXSquared = maxXSquared * maxXSquared; maxYSquared = maxYSquared * maxYSquared; //Square current positon xSquared = xSquared * xSquared; ySquared = ySquared * ySquared; //Calculate percent from center of the map var distanceFromCenter = Math.Sqrt(xSquared + ySquared); var percentFromCenter = distanceFromCenter/Math.Sqrt(maxXSquared + maxYSquared); if (rng < percentFromCenter) { zones.Map[x, y] = Zone.Residential; } else { zones.Map[x, y] = Zone.Work; } } } } return zones; }