diff --git a/includes/evenement.hpp b/includes/evenement.hpp index a650a40..ccaf40f 100644 --- a/includes/evenement.hpp +++ b/includes/evenement.hpp @@ -9,135 +9,17 @@ 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--; - } - } + static void creationSimulation(Univers **, const int, const int, int, int); // Lance la simulation pour un univers - static inline void lancerSimulation(Univers *) { } + static void lancerSimulation(Univers *); // Arrête la simulation d'un univers - static inline void arreterSimulation(Univers * univers) { - delete univers; - univers = nullptr; - } + static void arreterSimulation(Univers *); // 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; - } + static void affichage(Univers *, const bool = false) noexcept; }; #endif diff --git a/src/evenement.cpp b/src/evenement.cpp new file mode 100644 index 0000000..edd3e74 --- /dev/null +++ b/src/evenement.cpp @@ -0,0 +1,129 @@ +#include "../includes/evenement.hpp" + +void Evenement::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--; + } +} + +void Evenement::arreterSimulation(Univers * univers) { + delete univers; + univers = nullptr; +} + +void Evenement::affichage(Univers * univers, const bool traits) 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; +} + +void Evenement::lancerSimulation(Univers * univers) { + std::cout << "Lancement de la simulation pour l'univers n°" << univers->ID << "..." << std::endl; +}