Reputation: 21
How can I print the multi-colored characters in a one line using only basic commands, such as Console.Write
and Console.WriteLine
?
For example I need something like:
Console.WriteLine($"red{M}green{U}blue{L}yellow{T}purple{I}");
where M
, U
and L
are different values, like int
or string
.
Upvotes: 2
Views: 3562
Reputation: 11
This is what I would use, probably not the best method but it does work.
class Program
{
static void Main(string[] args)
{
// ~ red, ` green, ^ blue, * yellow, _ purple
ColorWrite("~M`u^l*t_i", true);
ColorWrite("~This is red,^ yet this is blue.", true);
ColorWrite("~Mul`ti^ple ", false);
ColorWrite("*Col_ours ", false);
}
// variable contains both consoleColor and char
struct ColourKey
{
public ConsoleColor color;
public char key;
public ColourKey(ConsoleColor Color, char Key)
{
this.color = Color;
this.key = Key;
}
}
static void ColorWrite(string rawtext, bool endline)
{
//all avaliable colours, for more just make the array bigger
ColourKey[] Pallete = new ColourKey[5];
Pallete[0] = new ColourKey(ConsoleColor.Red, '~');
Pallete[1] = new ColourKey(ConsoleColor.Green, '`');
Pallete[2] = new ColourKey(ConsoleColor.Blue, '^');
Pallete[3] = new ColourKey(ConsoleColor.Yellow, '*');
Pallete[4] = new ColourKey(ConsoleColor.DarkMagenta, '_'); //ConsoleColor does not contain purple
foreach (char c in rawtext)
{
bool CanWrite = true;
foreach (ColourKey ck in Pallete)
{
if (c == ck.key)
{
Console.ForegroundColor = ck.color;
CanWrite = false;
}
}
if (CanWrite)
{
Console.Write(c);
}
}
Console.ResetColor();
// true function works like writeline(), false works like write()
if (endline)
{
Console.WriteLine();
}
}
Upvotes: 1
Reputation: 5634
You can use a dictionary as shown in below code and then a loop :
Dictionary<int, KeyValuePair<string, ConsoleColor>> keyValuePairs = new Dictionary<int, KeyValuePair<string, ConsoleColor>>();
keyValuePairs.Add(1, new KeyValuePair<string, ConsoleColor>("my blue text", ConsoleColor.Blue));
keyValuePairs.Add(2, new KeyValuePair<string, ConsoleColor>("my red text", ConsoleColor.Red));
foreach (var keyItem in keyValuePairs.Keys)
{
ConsoleColor color = keyValuePairs[keyItem].Value;
string textTobeDisplayed = keyValuePairs[keyItem].Key;
Console.ForegroundColor = color;
Console.Write(textTobeDisplayed);
}
Upvotes: 1
Reputation: 1
I hope this help you
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("White on Blue.");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("White on Red.");
Console.ResetColor();
Console.ReadLine();
}
}
Upvotes: -1