Бегущая строка на C#

от автора

Привет всем!
В данной статье я решил привести пример реализации бегущей строки на 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());                 }             }         }

Всем спасибо за внимание.

ссылка на оригинал статьи https://habr.com/ru/post/518850/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *