From 32de6b9498db85f217c5f35e9c6b8a2bee5f73d3 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Wed, 6 Apr 2022 12:01:35 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9placement=20des=20fonctions/m=C3=A9thode?= =?UTF-8?q?s=20d'=C3=A9v=C3=A8nement=20dans=20une=20classe=20sp=C3=A9ciali?= =?UTF-8?q?s=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/evenement.hpp | 143 +++++++++++++++++++++++++++++++++++++++++ includes/univers.hpp | 6 +- src/main.cpp | 33 +++------- src/univers.cpp | 106 ------------------------------ 4 files changed, 152 insertions(+), 136 deletions(-) create mode 100644 includes/evenement.hpp diff --git a/includes/evenement.hpp b/includes/evenement.hpp new file mode 100644 index 0000000..a650a40 --- /dev/null +++ b/includes/evenement.hpp @@ -0,0 +1,143 @@ +#ifndef ECOSYSTEME_EVENEMENT_HPP +#define ECOSYSTEME_EVENEMENT_HPP 1 + +#include "../includes/univers.hpp" +#include "../includes/mouton.hpp" +#include "../includes/loup.hpp" + +struct Evenement { + Evenement() = delete; + + // Créer un univers pour préparer la simulation + static inline void creationSimulation(Univers ** univers, const int m, const int n, int nb_moutons, int nb_loups) { + *univers = new Univers(m, n); + + while(nb_moutons > 0) { // Création des moutons dans l'univers + new Mouton((*univers)->ID); + nb_moutons--; + } + while(nb_loups > 0) { // Création des loups dans l'univers + new Loup((*univers)->ID); + nb_loups--; + } + } + + // Lance la simulation pour un univers + static inline void lancerSimulation(Univers *) { } + + // Arrête la simulation d'un univers + static inline void arreterSimulation(Univers * univers) { + delete univers; + univers = nullptr; + } + + // Affiche un univers, possibilité d'afficher les + // traits séparant les valeurs du tableaux (par défaut : non) + static inline void affichage(Univers * univers, const bool traits = false) noexcept { + // On génère le plateau pour l'affichage + int * plateau = new int[univers->m_taille_univers](); + for(auto it: univers->m_liste_univers[univers->ID].second) { + plateau[it->position(univers->ID).first] = it->ID; + } + + int largeur_affichage = univers->m_largeur * 4; + + // On affiche les coordonées type "échequier" seulement + // si on a assez de lettre et que le nombre est inférieur à 100 (3 caractères) + char echequier = 0; + + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { + std::cout << " "; // espace du début + for(int i = 0; i < univers->m_largeur; ++i) { // pour toute la largeur + if(i < 9 && univers->m_largeur > 9) { // si on affiche + 9 nombres on ajoute + // un 0 au 9 premiers + std::cout << "0"; + } else { + if (i < 9) { // sinon si on affiche que max 9 nombres on met un espace + std::cout << " "; + } + } + std::cout << static_cast(echequier++) + 1 << " "; // cast en int + } + std::cout << std::endl; + } + echequier = 'A'; + + for(int i = 0; i < largeur_affichage; ++i) { + if(i == 0) { // coin supérieur gauche + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { // espace si il faut afficher l'echequier + std::cout << " "; + } + std::cout << "┌"; + } else { // haut + std::cout << "─"; + } + } + std::cout << "┐" << std::endl; // coin supérieur droit + + // premier côté gauche + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { // espace pour l'alignement du tableau si nécessaire + std::cout << echequier++ << " "; + } + std::cout << "│ "; + + for(int i = 0; i < univers->m_taille_univers; i += univers->m_largeur) { + for(int j = 0; j < univers->m_largeur; ++j) { + std::cout << Organisme::lettre(plateau[i + j]); + if(j == univers->m_largeur - 1) { + std::cout << " │ "; // côté droit + } else { // espace dans le tableau + if(traits) { + std::cout << " ┊ "; + } else { + + std::cout << " "; + } + } + } + if(i != univers->m_taille_univers - univers->m_largeur) { + std::cout << std::endl; + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { + std::cout << " "; + } + + // ligne vide + std::cout << "│"; + if(traits) { + for(int j = 0; j < univers->m_largeur - 1; ++j) { + std::cout << "---+"; + } + std::cout << "---"; + } else { + std::cout << std::string(static_cast(largeur_affichage - 1), ' '); // saut de ligne et remplissage + // de la ligne de vide pour y mettre + // le caractère fermant le tableau + } + std::cout << "│" << std::endl; + + // saut de ligne et suite du côté gauche + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { + std::cout << echequier++ << " "; + } + std::cout << "│ "; + } + } + + std::cout << std::endl; + for(int i = 0; i < largeur_affichage; ++i) { + if(i == 0) { + if(univers->m_longueur <= 26 && univers->m_largeur < 100) { // espace si il faut afficher l'echequier + std::cout << " "; + } + std::cout << "└"; // coin inférieur gauche + } else { + std::cout << "─"; // bas + } + } + std::cout << "┘" << std::endl; // coin inférieur droit + + delete[] plateau; + } +}; + +#endif diff --git a/includes/univers.hpp b/includes/univers.hpp index 5b15903..0d2dd97 100644 --- a/includes/univers.hpp +++ b/includes/univers.hpp @@ -12,6 +12,7 @@ class Univers { friend class Organisme; + friend class Evenement; const int m_longueur, m_largeur, m_taille_univers; // dimensions de l'univers int m_tour; // âge de l'univers @@ -36,11 +37,6 @@ class Univers { ~Univers(void); - // Affiche l'univers à l'instant présent, possibilité - // d'afficher les traits séparant les valeurs du - // tableaux, non par défaut - void affichage(bool = false) const noexcept; - // Vérifie s'il y a de la vie dans l'univers bool enVie(void) const noexcept; }; diff --git a/src/main.cpp b/src/main.cpp index 474c70f..ce72468 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,26 +1,5 @@ #include "../includes/univers.hpp" -#include "../includes/mouton.hpp" -#include "../includes/loup.hpp" - -// Lance la simulation pour un univers -void lancerSimulation(Univers ** univers, const int m, const int n, int nb_moutons, int nb_loups) { - *univers = new Univers(m, n); - - while(nb_moutons > 0) { // Création des moutons dans l'univers - new Mouton((*univers)->ID); - nb_moutons--; - } - while(nb_loups > 0) { // Création des loups dans l'univers - new Loup((*univers)->ID); - nb_loups--; - } -} - -// Arrête la simulation d'un univers -void arreterSimulation(Univers * univers) { - delete univers; - univers = nullptr; -} +#include "../includes/evenement.hpp" // m x n = taille de l'univers // nb_moutons = nombre de moutons @@ -46,11 +25,15 @@ int main(int argc, char const *argv[]) { Univers * univers = nullptr; try { - lancerSimulation(&univers, m, n, nb_moutons, nb_loups); + Evenement::creationSimulation(&univers, m, n, nb_moutons, nb_loups); - univers->affichage(); + Evenement::affichage(univers); - arreterSimulation(univers); + Evenement::lancerSimulation(univers); + + Evenement::affichage(univers); + + Evenement::arreterSimulation(univers); } catch(const std::exception& e) { std::cerr << e.what() << std::endl; return 1; diff --git a/src/univers.cpp b/src/univers.cpp index da6471c..e030a13 100644 --- a/src/univers.cpp +++ b/src/univers.cpp @@ -37,112 +37,6 @@ void Univers::melange(std::vector * vecteur) { std::shuffle(vecteur->begin(), vecteur->end(), graine); } -void Univers::affichage(bool traits) const noexcept { - // On génère le plateau pour l'affichage - int * plateau = new int[m_taille_univers](); - for(auto it: m_liste_univers[ID].second) { - plateau[it->position(ID).first] = it->ID; - } - - int largeur_affichage = m_largeur * 4; - - // On affiche les coordonées type "échequier" seulement - // si on a assez de lettre et que le nombre est inférieur à 100 (3 caractères) - char echequier = 0; - - if(m_longueur <= 26 && m_largeur < 100) { - std::cout << " "; // espace du début - for(int i = 0; i < m_largeur; ++i) { // pour toute la largeur - if(i < 9 && m_largeur > 9) { // si on affiche + 9 nombres on ajoute - // un 0 au 9 premiers - std::cout << "0"; - } else { - if (i < 9) { // sinon si on affiche que max 9 nombres on met un espace - std::cout << " "; - } - } - std::cout << static_cast(echequier++) + 1 << " "; // cast en int - } - std::cout << std::endl; - } - echequier = 'A'; - - for(int i = 0; i < largeur_affichage; ++i) { - if(i == 0) { // coin supérieur gauche - if(m_longueur <= 26 && m_largeur < 100) { // espace si il faut afficher l'echequier - std::cout << " "; - } - std::cout << "┌"; - } else { // haut - std::cout << "─"; - } - } - std::cout << "┐" << std::endl; // coin supérieur droit - - // premier côté gauche - if(m_longueur <= 26 && m_largeur < 100) { // espace pour l'alignement du tableau si nécessaire - std::cout << echequier++ << " "; - } - std::cout << "│ "; - - for(int i = 0; i < m_taille_univers; i += m_largeur) { - for(int j = 0; j < m_largeur; ++j) { - std::cout << Organisme::lettre(plateau[i + j]); - if(j == m_largeur - 1) { - std::cout << " │ "; // côté droit - } else { // espace dans le tableau - if(traits) { - std::cout << " ┊ "; - } else { - - std::cout << " "; - } - } - } - if(i != m_taille_univers - m_largeur) { - std::cout << std::endl; - if(m_longueur <= 26 && m_largeur < 100) { - std::cout << " "; - } - - // ligne vide - std::cout << "│"; - if(traits) { - for(int j = 0; j < m_largeur - 1; ++j) { - std::cout << "---+"; - } - std::cout << "---"; - } else { - std::cout << std::string(static_cast(largeur_affichage - 1), ' '); // saut de ligne et remplissage - // de la ligne de vide pour y mettre - // le caractère fermant le tableau - } - std::cout << "│" << std::endl; - - // saut de ligne et suite du côté gauche - if(m_longueur <= 26 && m_largeur < 100) { - std::cout << echequier++ << " "; - } - std::cout << "│ "; - } - } - - std::cout << std::endl; - for(int i = 0; i < largeur_affichage; ++i) { - if(i == 0) { - if(m_longueur <= 26 && m_largeur < 100) { // espace si il faut afficher l'echequier - std::cout << " "; - } - std::cout << "└"; // coin inférieur gauche - } else { - std::cout << "─"; // bas - } - } - std::cout << "┘" << std::endl; // coin inférieur droit - - delete[] plateau; -} - bool Univers::enVie(void) const noexcept { for(auto organisme: m_liste_univers[ID].second) { // on parcours les organismes de notre univers if(organisme->animal()) { // si on a un animal