[C#] Бегущая строка на C#
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет всем!
В данной статье я решил привести пример реализации бегущей строки на 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
===========
Похожие новости:
- [C#, Java, Ненормальное программирование] How to write Palindrome Polyglot Quines (перевод)
- [.NET, C#, ООП, Программирование] Творческое использование методов расширения в C# (перевод)
- [.NET, C#, Алгоритмы] GetHashCode() и философский камень, или краткий очерк о граблях
- [C#, ООП, Программирование] Волшебные методы в C# (перевод)
- [C#, Unity] Простая имитация разрушений с использованием Unity и Blender
- [.NET, ASP, C#, Программирование, Тестирование IT-систем] Я 20 лет наслаждаюсь разнообразием архитектур и хочу поделиться мыслями
- [.NET, ASP, C#] Варианты использования конфигурации в ASP.NET Core
- [Разработка веб-сайтов, Разработка мобильных приложений, C#, Облачные сервисы] Продвинутое велосипедостроение или клиент-серверное приложение на базе C# .Net framework
- [.NET, ASP, C#, Программирование, Тестирование IT-систем] Я десять лет страдал от ужасных архитектур в C# приложениях — и вот нашел, как их исправить
- [Совершенный код, .NET, C#] Как «готовить» nullable reference types с добавлением appsettings.json
Теги для поиска: #_c#, #_c#, #_c#
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:44
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет всем! В данной статье я решил привести пример реализации бегущей строки на 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 != "")
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 =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:44
Часовой пояс: UTC + 5