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;
|
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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
19
src/loup.cpp
19
src/loup.cpp
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue