Русский
Русский
English
Статистика
Реклама

Recovery mode Бегущая строка на 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());                }            }        }

Всем спасибо за внимание.
Источник: habr.com
К списку статей
Опубликовано: 12.09.2020 18:14:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

C

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru