Недавно у меня появилось новогоднее настроение (мда в начале декабря), надеюсь оно как обычно не пропадёт под конец года. Мне как раз нечего было разрабатывать и писать, я решил сделать себе программистский Новый Год на 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, получилось уже лучше, однако как сделать, чтобы он рандомно ставился только в заполненные поля?
Console.SetCursorPosition. Генерировать случайные числа: классRandom. – Alexander Petrov Dec 07 '20 at 09:19SetCursorPositionиспользуется? Когда вы вызываете этот метод, консоль переставляет курсор в нужные координаты. Когда вы следом вызываетеWriteилиWriteLineконсоль пишет что-то на месте курсора. Должно быть просто. Далее, почитайте про циклыforиforeachиwhile. Без них вам будет очень сложно сделать то что вы делаете. – aepot Dec 07 '20 at 13:02Random rnd = new Random(), в циклеConsole.SetCursorPosition(rnd.Next(Console.BufferWidth),rnd.Next(Console.BufferHeight)). Это выставит курсор в рандомную область экрана. Про "заполненные" не понял. Можете эти рандомы запомнить в переменные и использовать как точку отсчета для рисования. – aepot Dec 07 '20 at 13:29Point[] points = new Point[] { new Point(5, 11), new Point(2, 12) ... }и так далее. А потом циклом по этому массиву рисуя рандомным цветом.while (!Console.KeyAvailable) { foreach (Point point in points) { Console.SetCursorPosition(point.X, point.Y); Console.Write(...); } Thread.Sleep(500); } Console.ReadKey(true);– aepot Dec 07 '20 at 13:50