diff --git a/includes/univers.hpp b/includes/univers.hpp index dd36eb8..5b15903 100644 --- a/includes/univers.hpp +++ b/includes/univers.hpp @@ -36,8 +36,10 @@ class Univers { ~Univers(void); - // Affiche l'univers à l'instant présent - void affichage(void) const noexcept; + // 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/univers.cpp b/src/univers.cpp index 031c79b..da6471c 100644 --- a/src/univers.cpp +++ b/src/univers.cpp @@ -37,43 +37,102 @@ void Univers::melange(std::vector * vecteur) { std::shuffle(vecteur->begin(), vecteur->end(), graine); } -void Univers::affichage(void) const noexcept { +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; } - // On affiche les coordonées type "échequier" seulement - // si on a assez de lettre + int largeur_affichage = m_largeur * 4; - for(int i = 0; i < m_largeur * 4; ++i) { - if(i == 0) { - std::cout << "┌"; // coin supérieur gauche - } else { - std::cout << "─"; // haut + // 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 - std::cout << "│ "; // premier côté gauche + // 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 { - std::cout << " "; + } else { // espace dans le tableau + if(traits) { + std::cout << " ┊ "; + } else { + + std::cout << " "; + } } } if(i != m_taille_univers - m_largeur) { - std::cout << std::endl << "│ "; // saut de ligne et suite du côté gauche + 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 < m_largeur * 4; ++i) { + 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