#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