Смена цвета в случайных позициях в C#
Недавно у меня появилось новогоднее настроение (мда в начале декабря), надеюсь оно как обычно не пропадёт под конец года. Мне как раз нечего было разрабатывать и писать, я решил сделать себе программистский Новый Год на C#. Я вывел ёлочку под восьмибитную версию Jingle Bells в консоль, вот код:
using System;
using System.Media;
using System.Threading;
namespace HappyNewYear
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
// Врубает музыку.
SoundPlayer jingleBells = new SoundPlayer();
jingleBells.SoundLocation = Environment.CurrentDirectory + @"/JingleBells.wav";
jingleBells.PlayLooping();
Console.WriteLine("С новым годом!\n");
StarLayer();
TreeLayer(3);
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" 000 ");
Console.WriteLine(" 000 ");
Console.WriteLine(" 000 ");
while (true)
{
for (byte i = 0; i < 5; i++)
{
Console.SetCursorPosition(rand.Next(1, 9), rand.Next(6, 20));
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("0");
}
Thread.Sleep(400);
Console.Clear();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("С новым годом!\n");
StarLayer();
TreeLayer(3);
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" 000 ");
Console.WriteLine(" 000 ");
Console.WriteLine(" 000 ");
}
Console.ReadKey();
}
// Выводит слой ёлочки
static void TreeLayer(byte amount)
{
for (byte i = 0; i < amount; i++) {
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(" 0 ");
Console.WriteLine(" 000 ");
Console.WriteLine(" 00000 ");
Console.WriteLine(" 0000000 ");
Console.WriteLine(" 000000000 ");
Console.WriteLine(" 00000000000 ");
}
}
// Выводит звезду-пизду
static void StarLayer()
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(" 0 ");
Console.WriteLine(" 00000 ");
Console.WriteLine(" 000 ");
Console.WriteLine(" 0 0 ");
}
}
}
В общем я хочу чтобы ёлочка в рандомных местах меняла цвет на рандомный, типа красный, синий, жёлтый и так постоянно, желательно в такт музыке. Я знаю как менять цвет консоли, но вот вышеуказанную задачу просто не потяну.
UPD: По совету Александра Петрова) Я добавил в свой код SetCursorPosition, получилось уже лучше, однако как сделать, чтобы он рандомно ставился только в заполненные поля?
Ответы (1 шт):
static void Main()
{
Console.CursorVisible = false;
Console.BackgroundColor = ConsoleColor.Black;
Console.Clear();
var tree = new string[]
{
" 0 ",
" 000 ",
" 00000 ",
" 0000000 ",
" 000000000 ",
"00000000000",
" 0 ",
" 000 ",
" 00000 ",
" 0000000 ",
" 000000000 ",
"00000000000",
" 0 ",
" 000 ",
" 00000 ",
" 0000000 ",
" 000000000 ",
"00000000000"
};
var random = new Random();
while (true)
{
for (int y = 0; y < tree.Length; y++)
{
for (int x = 0; x < tree[y].Length; x++)
{
Console.ForegroundColor = (ConsoleColor)random.Next(1, 16);
Console.SetCursorPosition(x, y);
Console.Write(tree[y][x]);
}
Console.WriteLine();
}
Thread.Sleep(500);
};
}