Привет всем!
В данной статье я решил привести пример реализации бегущей строки на C#.
Суть заключается в том, чтобы выводить последовательно определенное количество символов из переменной string.
Для этого я использовал структуру
Переменные Text и outText используются для хранения входного и выходного текста. Выходным тестом являются элементы массива Text расположенные в диапозоне от min до max.
Length в данной структуре хранит количество элементов от min до max и задается при инициализации структуры.
Метод Initialize необходим для задания исходного текста и возврата переменных min и max в исходное состояние.
Метод CharPosl возвращает в массиве последовательность символов расположенных в промежутке от min до max.
Данный метод записывает массив символов в выходной текст.
Методы wpered и nazad изменяют значение переменных min и max сдвигая тем самым номер начального и конечного элемента переменной Text. В случае если условие
значение переменных min и max становится максимальным и возвращаются последние элементы текста, в случае когда увеличения значения переменной max выйдет за границы массивы, осуществляется возврат на стартовую позицию.
Метод ReturnText возвращает конечный текст.
Далее приведён метод, демастрирующий возможности структуры.
Всем спасибо за внимание.
В данной статье я решил привести пример реализации бегущей строки на 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());
}
}
}
Всем спасибо за внимание.
atd
Лучше спрячьте, пока не заминусовали.
atd
Для небольшой разминки в code-golf, вот на что можно заменить всю вашу простыню текста:
fedorro
?(°_o)/?
atd
Да, признаю поражение ))
ARad
Почему Slice, а не Substring? Выигрыша нет.