Méthode casesPossible qui renvoie la liste des cases où peut aller l'animal
This commit is contained in:
parent
8c06ac5dde
commit
3d8e676cd8
2 changed files with 102 additions and 0 deletions
|
@ -28,6 +28,9 @@ class Animal: public Organisme {
|
||||||
// Renvoie une vitesse aléatoire (+ élevé = + rapide)
|
// Renvoie une vitesse aléatoire (+ élevé = + rapide)
|
||||||
virtual int generationVitesse(void) const noexcept = 0;
|
virtual int generationVitesse(void) const noexcept = 0;
|
||||||
|
|
||||||
|
// Renvoie la liste des cases accesible depuis la position de l'animal
|
||||||
|
std::vector<int> casesPossible(void) const noexcept;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const int vitesse; // vitesse de l'organisme
|
const int vitesse; // vitesse de l'organisme
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#include "../includes/animal.hpp"
|
#include "../includes/animal.hpp"
|
||||||
|
#include "../includes/univers.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
||||||
const int faim_max, const int p_vitesse): Organisme(univers_ID, false, index),
|
const int faim_max, const int p_vitesse): Organisme(univers_ID, false, index),
|
||||||
|
@ -13,3 +16,99 @@ Animal::Animal(const int univers_ID, const int age_max,
|
||||||
vitesse(p_vitesse) { }
|
vitesse(p_vitesse) { }
|
||||||
|
|
||||||
Animal::~Animal(void) { }
|
Animal::~Animal(void) { }
|
||||||
|
|
||||||
|
std::vector<int> Animal::casesPossible(void) const noexcept {
|
||||||
|
std::vector<int> vec;
|
||||||
|
|
||||||
|
int longueur_univers = Univers::m_dimensions_univers[m_univers_ID].first,
|
||||||
|
taille_max_univers = longueur_univers * Univers::m_dimensions_univers[m_univers_ID].second,
|
||||||
|
i;
|
||||||
|
|
||||||
|
auto debut = Univers::m_index_libres_univers[m_univers_ID].second.begin();
|
||||||
|
auto fin = Univers::m_index_libres_univers[m_univers_ID].second.end();
|
||||||
|
|
||||||
|
// En haut à gauche
|
||||||
|
i = m_index - longueur_univers - 1;
|
||||||
|
if(i >= 0 && i % longueur_univers < longueur_univers - 1) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// En haut
|
||||||
|
i = m_index - longueur_univers;
|
||||||
|
if(i >= 0) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// En haut à droite
|
||||||
|
i = m_index - longueur_univers + 1;
|
||||||
|
if(i >= 0 && i % longueur_univers != 0) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A gauche
|
||||||
|
i = m_index - 1;
|
||||||
|
if(i >= 0 && i % longueur_univers < longueur_univers - 1) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A droite
|
||||||
|
i = m_index + 1;
|
||||||
|
if(i < taille_max_univers && i % longueur_univers != 0) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// En bas à gauche
|
||||||
|
i = m_index + longueur_univers - 1;
|
||||||
|
if(i < taille_max_univers && i % longueur_univers < longueur_univers - 1) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// En bas
|
||||||
|
i = m_index + longueur_univers;
|
||||||
|
if(i < taille_max_univers) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// En bas à droite
|
||||||
|
i = m_index + longueur_univers + 1;
|
||||||
|
if(i < taille_max_univers && i % longueur_univers != 0) {
|
||||||
|
// On retire ceux qui sont déjà occupés par un animal
|
||||||
|
auto it = std::find(debut, fin, i);
|
||||||
|
if(it != fin) {
|
||||||
|
vec.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// On rajoute l'index actuel car l'animal peut décidé de rester sur place
|
||||||
|
vec.push_back(m_index);
|
||||||
|
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
Reference in a new issue