当前位置: 首页>>代码示例>>C++>>正文


C++ Zone::get_location方法代码示例

本文整理汇总了C++中Zone::get_location方法的典型用法代码示例。如果您正苦于以下问题:C++ Zone::get_location方法的具体用法?C++ Zone::get_location怎么用?C++ Zone::get_location使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Zone的用法示例。


在下文中一共展示了Zone::get_location方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: evolve_virus

/*
 * 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;
	}	
}
开发者ID:dtbinh,项目名称:15418-final-project,代码行数:24,代码来源:virus.cpp

示例2: infect

/*
 * if start is set to true, then it means this method is being called to initiate a virus. else
 * if a person is infecting another person, this function uses various probability functions to 
 * check whether the latter is successfully infected.
 * returns true or false depending on whether infection succeeded
 */
bool Virus::infect(Zone zone, Person infector, Person infecting, bool start) {
	// only infect the person if he is not vaccinated against the virus
	if (infecting.vaccined[name].first) {
		if (fmod(id,infecting.vaccined[name].second) != 0) {
			// infecting is vaccined against this mutation of virus 
			return false;
		}
	}

	if (start) {
		this->infected_people.push_back(infecting);
		this->current_infected ++;
		// set person to immune with 1% probability
		int is_immune = rand()%100 + 1;
		if (is_immune == 1) {
			infecting.immune[this->name] = true;
			this->immune_people.push_back(infecting);
		}
		return true;
	}
	else {
		
		// for all viruses, a higher zone population density makes prob of infection higher
		// population density in real world can be anywhere from 1 - 50000 (people per km^2)
		// take this density over 100000

		double prob = zone.calculate_population_density()/MAX_POPULATION_DENSITY;
		// also if infector is a carrier (naturally immune)  probability is higher to infect
		if (infector.immune["name"]) {
			prob *= 1.5;
		}
		if (this->name.compare("HIV") == 0) {
			// assume that children (12 and under) are much less likely to be infected
			// changes of infection are higher if the age differential between the two people is lower
			// also, the level of healthcare in the zone makes a difference
			if (infecting.age > 12) {
				prob *= (abs(infector.age - infecting.age)*0.25)/100.0; 
				prob *= (1.0 - zone.get_location().healthcare);
			}
			else {
				prob = 0.05;
			}
		}
		else if (this->name.compare("Flu") == 0) {
			// has a higher probability of infecting young children and the elderly (above 60)
			// younger people who are infected also have a higher change of infecting others
			// the level of pollution in the zone makes a difference
			double chance = 0.25;
			if (infecting.age > 60|| infecting.age < 15) {
				chance = 0.5;
			}
			prob *= (100 - infector.age)*chance/100.0;
			prob *= zone.get_location().pollution;
		}
		else if (this->name.compare("Ebola") == 0) {
			// everyone gets equal chance of getting infected with ebola
			// chances of infection depends on zone
			// the level of pollution in the zone makes a difference
			prob *= 0.9;
			prob *= zone.get_location().pollution;
		}


		// use prob to decide whether or not to infect person
		if ((rand() % 100 + 1.0)/100.0 < prob) {
			this->infected_people.push_back(infecting);
			this->current_infected ++;
			// set person to immune with 1% probability
			int is_immune = rand() % 100 + 1;
			if (is_immune == 1) {
				infecting.immune[this->name] = true;
				this->immune_people.push_back(infecting);
			}
			return true;
		}

		return false;
	}
}
开发者ID:dtbinh,项目名称:15418-final-project,代码行数:85,代码来源:virus.cpp


注:本文中的Zone::get_location方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。