Требуется написать программу которая будет выводит цепочку падающих символов. Первый снизу символ должен быть белый, второй зеленый, остальные темно-зеленые.
Проблема в том, что цепочку падающих символов вывел, а как смещать цепочку символов вниз так и не понял. Если я правильно понял то, надо установить курсор в начало строки и потом уже как-то смещать её вниз.
using System;
namespace Task1
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
int lenghtStr = rand.Next(1, 11);
char[] column = new char[lenghtStr];
for (int i = 0; i < lenghtStr; i++)
{
column[i] = (char)rand.Next('A', 'Z');
}
for (int i = 0; i < lenghtStr; i++)
{
if (i == (lenghtStr - 1))
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(column[i]);
}
else if (i == (lenghtStr - 2))
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(column[i]);
}
else
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine(column[i]);
}
}
Console.SetCursorPosition(0, 0);
Console.ReadKey();
}
}
}
Ответ
Создадим такой класс Символа
class Sign
{
//генератор будем использовать в этом классе и снаружи
public static Random RandomGen = new Random();
///
///
///
Console.ForegroundColor = ConsoleColor.White; }
///
Console.ForegroundColor = ConsoleColor.White; }
///
Класс Отображателя такой
class SignsShower { private int _heightWindow; private int _widthWindow; private int[] _widthPosSimple; private int[] _widthPosAddition;
private readonly Sign _sign = new Sign();
//ctor public SignsShower() : this((Console.WindowWidth - 1), Console.WindowHeight) { } ///
private void Initialization(int windowWidth, int windowHeight) { //получаем высоту окна _heightWindow = windowHeight;
int h1 = _heightWindow / 2; //половина высоты int h2 = _heightWindow / 4; //четверть высоты
//ширина окна _widthWindow = windowWidth;
//два массива размером в ширину окна _widthPosSimple = new int[_widthWindow]; _widthPosAddition = new int[_widthWindow];
//заполнение массивов случайными числами for (int i = 0; i < _widthWindow; i++) { _widthPosSimple[i] = Sign.RandomGen.Next(_heightWindow);
int k = (i % 11 != 10) ? 2 : 1; int min = h2 * k; int max = h1 * k; _widthPosAddition[i] = Sign.RandomGen.Next(min, max); } }
///
//сдвигаем координату по высоте для отображения в след. цикле вызова SignShow() _widthPosSimple[i] = CheckNextHeightPosition(_widthPosSimple[i] + 1, _heightWindow);
//пробельный символ int next = _widthPosSimple[i] - _widthPosAddition[i]; int nextPos = CheckNextHeightPosition(next, _heightWindow); _sign.ShowSpaceSign(i, nextPos); } }
///
if (next < 0) { return next + height; } else { return next; }
} }
Теперь включим в работу эти классы так
static void Main(string[] args) { //отображатель SignsShower signsShower = new SignsShower();
//готовим консоль Console.Clear(); Console.CursorVisible = false;
//в бесконечном цикле с вычисляемой задержкой отображаем int ms = 0; while (true) { //засекаем время DateTime timeMark = DateTime.Now; //отображаем символы signsShower.SignShow();
//задержка ms = 10 - (int)((TimeSpan)(DateTime.Now - timeMark)).TotalMilliseconds; if (ms > 0) System.Threading.Thread.Sleep(ms); }
}
Не знаю, правильно ли я вас понял, но по крайней мере у вас теперь есть от чего плясать.
Комментариев нет:
Отправить комментарий