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

View file

@ -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

View file

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

View file

@ -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();
}

View file

@ -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>();

View file

@ -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 {

View file

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