2010-10-21 2 views
1

Salut En essayant d'ajouter de la couleur à cette chaîne pour créer une application de console simple. Je voudrais que chaque lettre soit d'une couleur différente.C# Générateur de chaîne de la console avec foregroundColor

const string WelcomeMessage =  @" _______ _ _______  _______" + NewLine + 
            @"|__ __(_) |__ __| |__ __| " + NewLine + 
            @" | | _ ___| | __ _ ___| | ___ __" + NewLine + 
            @" | | | |/ __| |/ _` |/ __| |/ _ \/_ \ " + NewLine + 
            @" | | | | (__| | (_| | (__| | (_) | __/ " + NewLine + 
            @" |_| |_|\___|_|\__,_|\___|_|\___/ \___| " 

Je sais que je pourrais simplement utiliser

Console.ForegroundColor = ConsoleColor.Blue; 
Console.Write(" _______"); 

puis écrire chaque partie de la lettre, mais cela rendrait mon code presque impossible à lire et à maintenir. Donc je veux juste savoir s'il existe un type de jeu de construction StringBuilder pour la sortie de la console où il est possible d'inclure des informations de foregroundColor.

+2

Je n'ai pas de réponse à votre question, mais j'ai un conseil pour nettoyer votre chaîne. Lorsque vous ajoutez le @ au début d'un littéral de chaîne, vous êtes autorisé à continuer la chaîne sur les nouvelles lignes. donc chaîne hw = @ "Bonjour Monde"; aura le NewLine dedans. Gah! Les commentaires ne permettent pas le formatage en ligne. J'essayais d'avoir un
entre Hello et World. – Kleinux

Répondre

1

Je doute qu'il existe une API bien connue pour cela. Mais vous pouvez créer une liste de rectangles qui marquent chaque lettre. L'exemple suivant illustre ceci pour les trois premières lettres:

static void Main(string[] args) 
{ 
    string WelcomeMessage = 
           @" _______ _ _______  _______   " + Environment.NewLine + 
           @"|__ __(_) |__ __| |__ __|   " + Environment.NewLine + 
           @" | | _ ___| | __ _ ___| | ___ __ " + Environment.NewLine + 
           @" | | | |/ __| |/ _` |/ __| |/ _ \/_ \ " + Environment.NewLine + 
           @" | | | | (__| | (_| | (__| | (_) | __/ " + Environment.NewLine + 
           @" |_| |_|\___|_|\__,_|\___|_|\___/ \___| "; 

    List<Rectangle> list = new List<Rectangle>(); 
    list.Add(new Rectangle(new Point(0, 0), new Size(7, 6))); 
    list.Add(new Rectangle(new Point(8, 0), new Size(2, 6))); 
    list.Add(new Rectangle(new Point(10, 2), new Size(4, 4))); 

    Dictionary<Rectangle, ConsoleColor> colors = new Dictionary<Rectangle, ConsoleColor>(); 
    colors.Add(list[0], ConsoleColor.DarkBlue); 
    colors.Add(list[1], ConsoleColor.DarkRed); 
    colors.Add(list[2], ConsoleColor.DarkGreen); 
    Console.WriteLine(WelcomeMessage); 

    // NOTE: you might want to save the lines in an array where you define it: 
    string[] lines = WelcomeMessage.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
    for (int y = 0; y < lines.Length; y++) 
    { 
    string line = lines[y]; 
    for (int x = 0; x < line.Length; x++) 
    { 
     Rectangle rect = list.Where(c => 
     x >= c.X && x <= c.X + c.Width && 
     y >= c.Y && y <= c.Y + c.Height).FirstOrDefault(); 

     if (rect == Rectangle.Empty) 
     break ; // TODO Not implemented yet   
     else 
     {    
     Console.ForegroundColor = colors[rect]; 
     Console.Write(line[x]); 
     } 
    } 
    Console.WriteLine(); 
    } 

    Console.ReadKey();  
} 
Questions connexes