/* * modifies the attribute of this virus */ bool Virus::evolve_virus(Zone zone){ // we first check if we want to evolve the virus or not // uses randomness, the total number of infected people, level of pollution and healthcare double prob; prob = ((rand() % 100 + 1.0)/100.0) * this->current_infected/zone.get_initial_population() * zone.get_location().pollution * (1.0 - zone.get_location().healthcare); if ((rand() % 100 + 1.0)/100.0 > prob) { return false; } else { // evolve virus and return true // firstly, we want to make this virus immune to past cures and vaccines int i = zone.has_virus(this->name); // use i to access previous vaccine and cure for this virus, modify them zone.get_vaccines()[i].set_id(1); zone.get_cures()[i].set_id(1); this->evolved++; return true; } }