//dangerous...modifies the Map public Map addDisease(City c, int num = 1) { Map result = new Map(this); DiseaseColor color = c.color; for (int i = 0; i < num; i++) { if (result.cities[c.cityNumber].disease(color) < 3) { result.cities[c.cityNumber] = result.cities[c.cityNumber].adjustDisease(color, 1); if (result.diseaseLevel(c, color) == 3) { result.aboutToOutbreak = new List <City>(result.aboutToOutbreak); result.aboutToOutbreak.Add(c); } result.numInfectionsInCities++; } else { //outbreak List <City> outbreaks = new List <City>(); outbreaks.Add(c); List <City> toEvaluate = new List <City>(); toEvaluate.AddRange(c.adjacent); while (toEvaluate.Count != 0) { City current = toEvaluate.ElementAt(0); toEvaluate.RemoveAt(0); if (outbreaks.Contains(current)) { continue; } if (result.cities[current.cityNumber].disease(color) < 3) { result.cities[current.cityNumber] = result.cities[current.cityNumber].adjustDisease(color, 1); } else { toEvaluate.AddRange(current.adjacent); outbreaks.Add(current); } result.numInfectionsInCities++; if (result.diseaseLevel(current, color) == 3) { result.aboutToOutbreak = new List <City>(result.aboutToOutbreak); result.aboutToOutbreak.Add(current); } } result._outbreakCount += outbreaks.Count; } } return(result); }
public Map removeDisease(City city, DiseaseColor color) { Map result = new Map(this); result.cities[city.cityNumber] = result.cities[city.cityNumber].adjustDisease(color, -1); result.numInfectionsInCities--; if (result.aboutToOutbreak.Contains(city) && result.diseaseLevel(city, city.color) != 3) { result.aboutToOutbreak = new List <City>(result.aboutToOutbreak); result.aboutToOutbreak.Remove(city); } return(result); }
public Map removeDisease(City city, DiseaseColor color) { Map result = new Map(this); result.cities[city.cityNumber] = result.cities[city.cityNumber].adjustDisease(color, -1); result.numInfectionsInCities --; if (result.aboutToOutbreak.Contains(city) && result.diseaseLevel(city, city.color) != 3) { result.aboutToOutbreak = new List<City>(result.aboutToOutbreak); result.aboutToOutbreak.Remove(city); } return result; }
//dangerous...modifies the Map public Map addDisease(City c, int num = 1) { Map result = new Map(this); DiseaseColor color = c.color; for (int i = 0; i < num; i++) { if (result.cities[c.cityNumber].disease(color) < 3) { result.cities[c.cityNumber] = result.cities[c.cityNumber].adjustDisease(color, 1); if (result.diseaseLevel(c, color) == 3) { result.aboutToOutbreak = new List<City>(result.aboutToOutbreak); result.aboutToOutbreak.Add(c); } result.numInfectionsInCities ++; } else { //outbreak List<City> outbreaks = new List<City>(); outbreaks.Add(c); List<City> toEvaluate = new List<City>(); toEvaluate.AddRange(c.adjacent); while (toEvaluate.Count != 0) { City current = toEvaluate.ElementAt(0); toEvaluate.RemoveAt(0); if (outbreaks.Contains(current)) continue; if (result.cities[current.cityNumber].disease(color) < 3) { result.cities[current.cityNumber] = result.cities[current.cityNumber].adjustDisease(color, 1); } else { toEvaluate.AddRange(current.adjacent); outbreaks.Add(current); } result.numInfectionsInCities++; if (result.diseaseLevel(current, color) == 3) { result.aboutToOutbreak = new List<City>(result.aboutToOutbreak); result.aboutToOutbreak.Add(current); } } result._outbreakCount += outbreaks.Count; } } return result; }