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:
Mylloon 2022-04-18 11:54:12 +02:00
parent 4a36eebed1
commit 8d9613fd64
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
7 changed files with 38 additions and 22 deletions

View file

@ -98,6 +98,8 @@ void Animal::procreation(void) noexcept {
m_partenaire = partenaire; m_partenaire = partenaire;
partenaire->m_partenaire = this; 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 m_reproduire = 1; // accouchement dans 1 tour
} }
} else { } else {

View file

@ -47,7 +47,7 @@ class Organisme {
std::string coordoneeeEchequier(void) const noexcept; std::string coordoneeeEchequier(void) const noexcept;
// Fais mourir l'organisme en libérant sa position // Fais mourir l'organisme en libérant sa position
void mortOrganisme(bool = true) noexcept; void mortOrganisme(void) noexcept;
}; };
#endif #endif

View file

@ -165,6 +165,7 @@ void Evenement::lancerSimulation(Univers * univers) {
// Supprime les organismes mort du vecteur `Univers::m_organismes_univers` // Supprime les organismes mort du vecteur `Univers::m_organismes_univers`
univers->nettoyageMorts(); univers->nettoyageMorts();
std::cout << std::endl;
affichage(univers); affichage(univers);
} }

View file

@ -22,7 +22,7 @@ bool Loup::carnivore(void) const noexcept {
void Loup::action(void) { void Loup::action(void) {
if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim
mortOrganisme(m_superposable); mortOrganisme();
return; return;
} else { } else {
++m_age; // augmente l'âge ++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 // 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 // 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 // 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 if(m_faim >= m_repas_tt_les_cb_de_tours && m_partenaire == nullptr) { // mange si besoin
std::vector<int> cases_aux_alentours = casesAlentours(); std::vector<int> cases_aux_alentours = casesAlentours();
for(auto organisme: Univers::m_organismes_univers[m_univers_ID]) { // regarde tout les organismes 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(deplacement_effectue) {
if(organisme->position().first == it) { // si 1 organisme sur la position break;
}
if(!organisme->mort) { // si l'organisme n'est pas mort
if(auto proie = dynamic_cast<Mouton *>(organisme)) { // si c'est un mouton 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->m_deposer_sediment = false;
proie->mortOrganisme(proie->m_superposable); proie->mortOrganisme();
m_faim = 0; m_faim = 0;
std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(proie->ID) << "' (" << proie->ID << "/" << proie->coordoneeeEchequier() << ")" << std::endl; std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(proie->ID) << "' (" << proie->ID << "/" << proie->coordoneeeEchequier() << ")" << std::endl;
deplacement(proie->position().first); deplacement(proie->position().first);
deplacement_effectue = true;
break; break;
} }
} }
} }
} }
} else { }
}
if(!deplacement_effectue) {
deplacement(); deplacement();
} }

View file

@ -22,7 +22,7 @@ bool Mouton::carnivore(void) const noexcept {
void Mouton::action(void) { void Mouton::action(void) {
if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim if(m_age > m_age_max || m_faim > m_faim_max) { // meurt si trop vieux ou trop faim
mortOrganisme(m_superposable); mortOrganisme();
return; return;
} else { } else {
++m_age; // augmente l'âge ++m_age; // augmente l'âge
@ -35,9 +35,10 @@ void Mouton::action(void) {
// Mange si besoin // Mange si besoin
if(m_faim >= m_repas_tt_les_cb_de_tours && m_partenaire == nullptr) { 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 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(organisme->position().first == m_index) { // si 1 organisme sur ma position
if(dynamic_cast<Herbe *>(organisme)) { // si c'est de l'herbe 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; std::cout << "'" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ") mange '" << lettre(organisme->ID) << "' (" << organisme->ID << "/" << organisme->coordoneeeEchequier() << ")" << std::endl;
m_faim = 0; m_faim = 0;
break; break;
@ -45,6 +46,7 @@ void Mouton::action(void) {
} }
} }
} }
}
// S'accouple si besoin // S'accouple si besoin
procreation<Mouton>(); procreation<Mouton>();

View file

@ -68,10 +68,10 @@ std::string Organisme::coordoneeeEchequier(void) const noexcept {
return y + std::to_string(x); 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 // On remet notre index dans le vecteur des index vide
// puis on remélange notre vecteur // 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::m_index_libres_univers[m_univers_ID].first.push_back(m_index);
Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first); Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first);
} else { } else {
@ -81,6 +81,8 @@ void Organisme::mortOrganisme(const bool type) noexcept {
// On déclare mort l'organisme // On déclare mort l'organisme
mort = true; mort = true;
std::cout << "Mort de '" << lettre(ID) << "' (" << ID << "/" << coordoneeeEchequier() << ")" << std::endl;
} }
void Organisme::suppresionVecteurs(void) noexcept { void Organisme::suppresionVecteurs(void) noexcept {

View file

@ -17,7 +17,7 @@ Sel::~Sel(void) {
void Sel::action(void) { void Sel::action(void) {
if(m_age == 1) { // devient de l'herbe au bout d'un tour if(m_age == 1) { // devient de l'herbe au bout d'un tour
mortOrganisme(m_superposable); mortOrganisme();
} else { } else {
++m_age; ++m_age;
} }