예제 #1
0
void Humain::agir() {

	CIBLE cible = NOURRITURE;

	// Si le stock de nourriture est en dessous du seuil 
	if(Village::nourriture < Config::alerte_nourriture) {
		cible = NOURRITURE;
	} 
	else if (Village::bois < Config::alerte_bois) {
		cible = BOIS;
	} 
	else {
		cible = REPRODUCTION;
	}

	// On recherche la cible la plus proche
	Position positionCible = this->chercherPlusPres(cible);
	Monde* monde = Monde::getInstance();
	bool trouver = false;
	for(unsigned int i = 0; i < this->getVitesse() && !trouver; i++) {
	
		// On trouve la direction adapté pour se rendre à la cible la plus proche
		DIRECTIONS directionCible = this->calculerDirectionPourAllerPosition(positionCible);
		Position nouvellePos = this->calculerNouvelleCoordonnees(this->getPosition(), directionCible);
		
		// Si la position sur laquelle on est , n'est pas déjà la bonne
		if(nouvellePos != this->getPosition()) {

			// On vérifie si il y ades ressource à obtenir	
			// Si il ya un sanglier sur sa case et que l'homme cherche de la nourriture
			if(cible == NOURRITURE && monde->getTypeOccupant(nouvellePos) == SANGLIER) {
				// Si la position existe dans la map
				if(monde->getCarte().count(nouvellePos) > 0) {
					Element* aSupprimer = (*monde)[monde->getCarte()[nouvellePos]];
					Monde::getInstance()->supprimerElement(aSupprimer);
					Village::recevoirNourriture(Config::sanglier_nourriture_donnee);
					trouver = true; // on sort de la boucle vu qu'on a attein l'objectif
				}
			// On vérifie si il y ades ressource à obtenir	
			// Si il ya un abre sur sa case et que l'homme cherche de la bois
			}else if ( cible == BOIS && monde->getTypeOccupant(nouvellePos) == ARBRE){
				int indiceElement = monde->getCarte()[nouvellePos];
				Element* aSupprimer = (*monde)[indiceElement];
				Monde::getInstance()->supprimerElement(aSupprimer);
				Village::recevoirBois(Config::arbre_bois_donnee);
				trouver = true;
			}
			// On consomme des ressources
			Village::consomerBois();
			Village::consomerNourriture();
			// On bouge
			this->bouger(directionCible);

		}
	}
}
int main(){
	cout << "Création d'un monde à partir des données" << endl;
	Monde monde;
	for(int i=0;i<7;i++){
		cout << "Carte " << i << endl;
		afficherCarte(monde.getCarte(i));
		cout << endl << endl;
	}
}