Modifications
- Ajout des informations sur ce qui se passe dans l'organisme - mort de l'organisme ne necessite plus le type de l'organisme en argument - Les animaux vérifient que leur repas soit bien vivant avant de le manger
This commit is contained in:
parent
4a36eebed1
commit
8d9613fd64
7 changed files with 38 additions and 22 deletions
|
@ -98,6 +98,8 @@ void Animal::procreation(void) noexcept {
|
|||
m_partenaire = partenaire;
|
||||
partenaire->m_partenaire = this;
|
||||
|
||||
std::cout << "Reproduction entre '" << lettre(ID) << "' (" << coordoneeeEchequier() << ") et '" << lettre(partenaire->ID) << "' (" << partenaire->coordoneeeEchequier() << ")" << std::endl;
|
||||
|
||||
m_reproduire = 1; // accouchement dans 1 tour
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -47,7 +47,7 @@ class Organisme {
|
|||
std::string coordoneeeEchequier(void) const noexcept;
|
||||
|
||||
// Fais mourir l'organisme en libérant sa position
|
||||
void mortOrganisme(bool = true) noexcept;
|
||||
void mortOrganisme(void) noexcept;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -165,6 +165,7 @@ void Evenement::lancerSimulation(Univers * univers) {
|
|||
// Supprime les organismes mort du vecteur `Univers::m_organismes_univers`
|
||||
univers->nettoyageMorts();
|
||||
|
||||
std::cout << std::endl;
|
||||
affichage(univers);
|
||||
}
|
||||
|
||||
|
|
19
src/loup.cpp
19
src/loup.cpp
|
@ -22,7 +22,7 @@ bool Loup::carnivore(void) const noexcept {
|
|||
|
||||
void Loup::action(void) {
|
||||
if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim
|
||||
mortOrganisme(m_superposable);
|
||||
mortOrganisme();
|
||||
return;
|
||||
} else {
|
||||
++m_age; // augmente l'âge
|
||||
|
@ -33,23 +33,32 @@ void Loup::action(void) {
|
|||
// va regarder toutes les cases autour de lui, s'il a faim il va pouvoir
|
||||
// se déplacer vers une case où un mouton se trouve et le manger, s'il n'a
|
||||
// pas faim alors il va se déplacer comme un mouton
|
||||
bool deplacement_effectue = false;
|
||||
if(m_faim >= m_repas_tt_les_cb_de_tours && m_partenaire == nullptr) { // mange si besoin
|
||||
std::vector<int> cases_aux_alentours = casesAlentours();
|
||||
for(auto organisme: Univers::m_organismes_univers[m_univers_ID]) { // regarde tout les organismes
|
||||
for(auto it: cases_aux_alentours) { // regarde toutes les cases aux alentours
|
||||
if(organisme->position().first == it) { // si 1 organisme sur la position
|
||||
if(deplacement_effectue) {
|
||||
break;
|
||||
}
|
||||
if(!organisme->mort) { // si l'organisme n'est pas mort
|
||||
if(auto proie = dynamic_cast<Mouton *>(organisme)) { // si c'est un mouton
|
||||
for(auto it: cases_aux_alentours) { // regarde toutes les cases aux alentours
|
||||
if(proie->position().first == it) { // si 1 mouton sur la position
|
||||
proie->m_deposer_sediment = false;
|
||||
proie->mortOrganisme(proie->m_superposable);
|
||||
proie->mortOrganisme();
|
||||
m_faim = 0;
|
||||
std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(proie->ID) << "' (" << proie->ID << "/" << proie->coordoneeeEchequier() << ")" << std::endl;
|
||||
deplacement(proie->position().first);
|
||||
deplacement_effectue = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
if(!deplacement_effectue) {
|
||||
deplacement();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ bool Mouton::carnivore(void) const noexcept {
|
|||
|
||||
void Mouton::action(void) {
|
||||
if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim
|
||||
mortOrganisme(m_superposable);
|
||||
mortOrganisme();
|
||||
return;
|
||||
} else {
|
||||
++m_age; // augmente l'âge
|
||||
|
@ -35,9 +35,10 @@ void Mouton::action(void) {
|
|||
// Mange si besoin
|
||||
if(m_faim >= m_repas_tt_les_cb_de_tours && m_partenaire == nullptr) {
|
||||
for(auto organisme: Univers::m_organismes_univers[m_univers_ID]) { // regarde tout les organismes
|
||||
if(!organisme->mort) { // si l'organisme n'est pas mort
|
||||
if(organisme->position().first == m_index) { // si 1 organisme sur ma position
|
||||
if(dynamic_cast<Herbe *>(organisme)) { // si c'est de l'herbe
|
||||
organisme->mortOrganisme(organisme->m_superposable);
|
||||
organisme->mortOrganisme();
|
||||
std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(organisme->ID) << "' (" << organisme->ID << "/" << organisme->coordoneeeEchequier() << ")" << std::endl;
|
||||
m_faim = 0;
|
||||
break;
|
||||
|
@ -45,6 +46,7 @@ void Mouton::action(void) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// S'accouple si besoin
|
||||
procreation<Mouton>();
|
||||
|
|
|
@ -68,10 +68,10 @@ std::string Organisme::coordoneeeEchequier(void) const noexcept {
|
|||
return y + std::to_string(x);
|
||||
}
|
||||
|
||||
void Organisme::mortOrganisme(const bool type) noexcept {
|
||||
void Organisme::mortOrganisme(void) noexcept {
|
||||
// On remet notre index dans le vecteur des index vide
|
||||
// puis on remélange notre vecteur
|
||||
if(type) { // vecteur différent en fonction du type
|
||||
if(m_superposable) { // vecteur différent en fonction du type
|
||||
Univers::m_index_libres_univers[m_univers_ID].first.push_back(m_index);
|
||||
Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first);
|
||||
} else {
|
||||
|
@ -81,6 +81,8 @@ void Organisme::mortOrganisme(const bool type) noexcept {
|
|||
|
||||
// On déclare mort l'organisme
|
||||
mort = true;
|
||||
|
||||
std::cout << "Mort de '" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ")" << std::endl;
|
||||
}
|
||||
|
||||
void Organisme::suppresionVecteurs(void) noexcept {
|
||||
|
|
|
@ -17,7 +17,7 @@ Sel::~Sel(void) {
|
|||
|
||||
void Sel::action(void) {
|
||||
if(m_age == 1) { // devient de l'herbe au bout d'un tour
|
||||
mortOrganisme(m_superposable);
|
||||
mortOrganisme();
|
||||
} else {
|
||||
++m_age;
|
||||
}
|
||||
|
|
Reference in a new issue