#ifndef ECOSYSTEME_ANIMAL_HPP #define ECOSYSTEME_ANIMAL_HPP 1 #include "univers.hpp" #include "sel.hpp" /* Un animal possède une vitesse, plus il est rapide, * plus vite il se déplacera à chaque tour, par exemple : * dans le cas où un chasseur et un chassé s'ont l'un à côté * de l'autre, si le chasseur se déplace plus vite, il mangera * le chassé, en revanche, si c'est le chassé qui a une meilleure * vitesse, alors c'est lui qui se déplacera en premier et il * fuira */ class Animal: public Organisme { // On regarde tout les organismes, dès qu'on trouve un organisme // à l'index regardé, on vérifie qu'il correspond à l'espece que // l'on recherche et qu'il est bien du genre opposé. // Ensuite on l'ajoute si tout est bon au vecteur `animaux` template void rechercheEspece(int, std::vector &) noexcept; // Renvoie la liste des animaux environnants template void animauxEnvirons(std::vector &) noexcept; protected: const int m_age_max; // age maximale que peut atteindre l'organisme const int m_faim_max; // faim maximal que peut atteindre l'animal avant de mourir int m_faim = 0; // faim de l'animal int m_age = 0; // age actuel de l'organisme // nombre de tour avant accouchement (-1 = quand pas enceinte) short m_reproduire = -1; Animal * m_partenaire = nullptr; // Vrai si l'animal doit déposé des sédiment au sol à sa mort bool m_deposer_sediment = true; const int genre; // genre, 0 = masculin, 1 = féminin // Nombre de tour a attendre avant de pouvoir se reproduire de nouveau const short m_attente_reproduction; // Renvoie une vitesse aléatoire (+ élevé = + rapide) virtual int generationVitesse(void) const noexcept = 0; // Renvoie un genre choisit aléatoirement int choixGenre(void) const noexcept; // Renvoie la liste des cases accesible depuis la position de l'animal std::vector casesPossible(void) const noexcept; // Permet l'accouplement avec un autre animal template void procreation(void) noexcept; // Déplace l'animal void deplacement(void) noexcept; public: const int vitesse; // vitesse de l'organisme // ID de l'univers, age max, faim max, vitesse, genre, rythme reproduction Animal(int, int, int, int, int, int); // ID de l'univers, index dans l'univers, age max, faim max, vitesse, genre, rythme reproduction Animal(int, int, int, int, int, int, int); ~Animal(void); // Animal carnivore ? virtual bool carnivore(void) const noexcept = 0; }; #include "animal_template.hpp" // définition du template #endif