В данной статье я решил привести пример реализации бегущей строки на C#.
Суть заключается в том, чтобы выводить последовательно определенное количество символов из переменной string.
Для этого я использовал структуру
GetText
поместив в неё переменные и методы для работы с бегущей
строкой.
public GetText(int TEXTLENGHT) { //размер возвращаемого текста должен включатькак минимум 1 символ if (TEXTLENGHT > 0) { lenght = TEXTLENGHT; } else if (TEXTLENGHT < 0) { lenght = 0 - TEXTLENGHT; } else { lenght = 1; } max = lenght; } public int lenght { get; }//переменная хранящея значение количества возвращаемых символов public static string Text; public static string outText; private static int min = 0, max;
Переменные Text и outText используются для хранения входного и выходного текста. Выходным тестом являются элементы массива Text расположенные в диапозоне от min до max.
Length в данной структуре хранит количество элементов от min до max и задается при инициализации структуры.
public void Initialize() { min = 0; max = lenght; wpered(); } public void Initialize(string TEXT) { Text = TEXT; min = 0; max = lenght; wpered(); }
Метод Initialize необходим для задания исходного текста и возврата переменных min и max в исходное состояние.
private char[] CharPosl(char[] input, int min, int max) { int lenght = max - min; char[] r = new char[lenght]; int counter = 0; for (int i = min; i < max; i++) { r[counter] = input[i]; counter++; } return r; }
Метод CharPosl возвращает в массиве последовательность символов расположенных в промежутке от min до max.
private void WriteT(char[] t) { string o = ""; for (int i = 0; i < t.Length; i++) { o += t[i].ToString(); } outText = o; }
Данный метод записывает массив символов в выходной текст.
public void wpered() { if (Text != "") { char[] sim = GetMas(Text); if (sim.Length >= lenght) { WriteT(CharPosl(sim, min, max)); min++; if (max++ >= sim.Length) { max--; min--; Initialize();//возврат в стартовое положение } } else { WriteT(Text); } } } public void nazad() { if (Text != "") { char[] sim = GetMas(Text); if (sim.Length > lenght) { WriteT(CharPosl(sim, min, max)); max--; if (min-- <= 0) { max = sim.Length - 1; min = max - lenght; //отправится в конец текста WriteT(CharPosl(sim, min, max)); } } else { WriteT(Text); } } } private char[] GetMas(string t) { return t.ToCharArray();//вернуть массив символов }
Методы wpered и nazad изменяют значение переменных min и max сдвигая тем самым номер начального и конечного элемента переменной Text. В случае если условие
if (Text != "")
не соблюдается, то есть входной текст является пустым, метод
возвращает исходный текст не изменяя значения переменных. В случае,
если стартовый индекс меньше 0
if (min-- <= 0) { max = sim.Length - 1; min = max - lenght; //отправится в конец текста WriteT(CharPosl(sim, min, max)); }
значение переменных min и max становится максимальным и возвращаются последние элементы текста, в случае когда увеличения значения переменной max выйдет за границы массивы, осуществляется возврат на стартовую позицию.
public string ReturnText() { return outText; }
Метод ReturnText возвращает конечный текст.
Далее приведён метод, демастрирующий возможности структуры.
static void Main(string[] args) { string t = "Приложение бегущей строки. Текст будет перемещатся в окне консоли.";//начальный текст который будет перемещатся GetText text = new GetText(12);//инициализация структуры с указанием количества выходных элементов text.Initialize(t);//отправка текста в структуру int i = t.Length; for(int counter = 0; counter < i; counter++) { Console.SetCursorPosition(12, 4);//установка положения курсора чтобы текст был на 1 строке Console.Write(text.ReturnText()); text.wpered(); System.Threading.Thread.Sleep(300);//Приостановка потока необходима для того, чтобы было видно что текст движестся Console.Clear();//очистка экрана консоли } int key; while ((key = (int)Console.ReadKey().Key) != 27)//Выключение при нажатии клавиши Esc { //Перемещение текста по нажатию клавиши клавиатуры if (key == 39) { Console.SetCursorPosition(12, 6); text.wpered();//перемещение на следующий символ Console.Clear(); Console.Write(text.ReturnText()); } if (key == 37) { Console.SetCursorPosition(12, 6); text.nazad();//перемещение на предыдущий символ Console.Clear(); Console.Clear(); Console.Write(text.ReturnText()); } } }
Всем спасибо за внимание.