From 8d9613fd64709da030ad4af475f0f6d60b5f1ccd Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 18 Apr 2022 11:54:12 +0200 Subject: [PATCH] =?UTF-8?q?Modifications=20-=20Ajout=20des=20informations?= =?UTF-8?q?=20sur=20ce=20qui=20se=20passe=20dans=20l'organisme=20-=20mort?= =?UTF-8?q?=20de=20l'organisme=20ne=20necessite=20plus=20le=20type=20de=20?= =?UTF-8?q?l'organisme=20en=20argument=20-=20Les=20animaux=20v=C3=A9rifien?= =?UTF-8?q?t=20que=20leur=20repas=20soit=20bien=20vivant=20avant=20de=20le?= =?UTF-8?q?=20manger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/animal_template.hpp | 2 ++ includes/organisme.hpp | 2 +- src/evenement.cpp | 1 + src/loup.cpp | 31 ++++++++++++++++++++----------- src/mouton.cpp | 16 +++++++++------- src/organisme.cpp | 6 ++++-- src/sel.cpp | 2 +- 7 files changed, 38 insertions(+), 22 deletions(-) diff --git a/includes/animal_template.hpp b/includes/animal_template.hpp index 3470638..eb86d79 100644 --- a/includes/animal_template.hpp +++ b/includes/animal_template.hpp @@ -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 { diff --git a/includes/organisme.hpp b/includes/organisme.hpp index 0adbc85..f649531 100644 --- a/includes/organisme.hpp +++ b/includes/organisme.hpp @@ -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 diff --git a/src/evenement.cpp b/src/evenement.cpp index 4de0424..3151340 100644 --- a/src/evenement.cpp +++ b/src/evenement.cpp @@ -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); } diff --git a/src/loup.cpp b/src/loup.cpp index d6b2eb6..7230c04 100644 --- a/src/loup.cpp +++ b/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 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(auto proie = dynamic_cast(organisme)) { // si c'est un mouton - proie->m_deposer_sediment = false; - proie->mortOrganisme(proie->m_superposable); - m_faim = 0; - std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(proie->ID) << "' (" << proie->ID << "/" << proie->coordoneeeEchequier() << ")" << std::endl; - deplacement(proie->position().first); - break; + if(deplacement_effectue) { + break; + } + if(!organisme->mort) { // si l'organisme n'est pas mort + if(auto proie = dynamic_cast(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(); + 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(); } diff --git a/src/mouton.cpp b/src/mouton.cpp index 09b1991..8bc1bf9 100644 --- a/src/mouton.cpp +++ b/src/mouton.cpp @@ -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,12 +35,14 @@ 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->position().first == m_index) { // si 1 organisme sur ma position - if(dynamic_cast(organisme)) { // si c'est de l'herbe - organisme->mortOrganisme(organisme->m_superposable); - std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(organisme->ID) << "' (" << organisme->ID << "/" << organisme->coordoneeeEchequier() << ")" << std::endl; - m_faim = 0; - break; + 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(organisme)) { // si c'est de l'herbe + organisme->mortOrganisme(); + std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(organisme->ID) << "' (" << organisme->ID << "/" << organisme->coordoneeeEchequier() << ")" << std::endl; + m_faim = 0; + break; + } } } } diff --git a/src/organisme.cpp b/src/organisme.cpp index 2555e2e..13c930c 100644 --- a/src/organisme.cpp +++ b/src/organisme.cpp @@ -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 { diff --git a/src/sel.cpp b/src/sel.cpp index 3231325..3201986 100644 --- a/src/sel.cpp +++ b/src/sel.cpp @@ -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; }