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; } }