Требуется написать программу которая будет выводит цепочку падающих символов. Первый снизу символ должен быть белый, второй зеленый, остальные темно-зеленые.
Проблема в том, что цепочку падающих символов вывел, а как смещать цепочку символов вниз так и не понял. Если я правильно понял то, надо установить курсор в начало строки и потом уже как-то смещать её вниз.
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);
}
}
Не знаю, правильно ли я вас понял, но по крайней мере у вас теперь есть от чего плясать.
Комментариев нет:
Отправить комментарий