Применение консольных операций для вывода бегущей строки — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Применение консольных операций для вывода бегущей строки

2019-10-30 129
Применение консольных операций для вывода бегущей строки 0.00 из 5.00 0 оценок
Заказать работу

Консольные функции можно использовать, чтобы украсить свою лабораторную работу выводом заставки в виде бегущей цветной строки.

Для этого на экране выделяется участок строки шириной в h знакомест, в которой мы видим пробегающую строку (ее длина больше, чем h, поэтому видна только часть строки). После прокрутки всей строки она повторно выводится сначала - мы хотим создать впечатление, что склеенная кольцом лента с текстом прокручивается перед окном шириной в h символов.

Пусть во время движения строки нажатием клавиши «Пробел» мы хотим изменять ее цвет, а нажатием клавиши Esc снимать заставку и переходить собственно к демонстрации лабораторной работы. Для решения задачи необходимо использовать консольную функцию kbhit().

Действительно, организуем работу программы в виде циклического выполнения следующих пунктов:

1. Выдержка паузы V миллисекунд

2. Вывод участка строки, начиная с символа номер k0

3. Ввод кода клавиши функцией getch() и отработка команды (изменение цвета или выход)

4. Изменение номер первого выводимого символа k0 и переходна пункт 1.

Если мы напишем и запустим такую программу, то не увидим бегущей строки – вычислительный процесс приостановится на пункте 3 – программа будет ожидать нажатия человеком клавиши.

Чтобы совместить движение строки с вводом, надо в пункте 3 проверять, не нажата ли клавиша и если человек ничего не нажимал, пропускать ввод. Таким образом, реализация пункта 3 должна иметь вид:

if (kbhit())              //Если клавиша не нажата – переходим к пункту 4

{char c=getch(); Если нажата –

                              вводим и обрабатываем символ

}.

Ниже показана реализация программы, в которой вывод бегущей строки оформлен в виде функции START(), получающей выводимую строку как параметр.

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <string.h>

long MyTime (void) Эта функция уже была в лекции по структурам

{ struct time t;

unsigned long tt=0;

gettime(&t);

tt= t.ti_hour*3600000l+t.ti_min*60000l+t.ti_sec*1000l+ t.ti_hund*10l;

return tt;

}

void START (char *T) Вывод бегущей строки T

{

int tPos =30;           Позиция первой видимой буквы на экране.

int k 0=0;               Номер в строке первой видимой буквы.

int V =150;             Период сдвига строки в миллисекундах.

int h =32;               Ширина видимой части строки.

int color=1;

 clrscr();

long oldT = MyTime();

while(1)

{ while (MyTime()-oldT<V);    Пауза V миллисекунд.

oldT = MyTime ();

int k = k 0;                          Позиция буквы в строке.

gotoxy (tPos,5);

for (int i =0; i < h; i ++) Если хотим изменять цвет каждой буквы,

{ textcolor (color);                                        пишем; textcolor(i/2+ color).

 

putch (T [ k ]);         Вывели символ на экран.

k = k > strlen (T)?0:++ k;     Изменяем номер символа k, и его позицию. Не замечаем, что максимальное значение k дает позицию дальше конца строки.

if (kbhit ())             Если клавиша не нажата – продолжаем движение,

{ char c = getch ();     если нажата – смело вводим, задержки на вводе не будет.

if (c ==' ') color ++; Введен пробел – изменяем цвет.

if (c ==27) return; Нажали Esc – снимаем заставку.

}

 }

k 0= k 0> strlen (T)?0:++ k 0; Изменяем позицию в строке первого видимого символа.

}

void main (void)

{

START (" Р А Б О Т А 1 О р г а н и з а ц и я и н т е р ф е й с а ");

<Текст основной программы>

getch ();

 }

При использовании рассмотренной функции можно увидеть, как что под бегущей строкой беспорядочно прыгает курсор. Проще всего избавиться от этого, самостоятельно реализовав функцию Symbol(int x, int y, char C. char color), которая выводит символ C в позицию экрана x,y непосредственной записью в видеопамять.

Кроме того, строка движется рывками, так как смещается не на одну точку, а на одно знакоместо. Для плавного движения строку надо выводить в графическом режиме. Попробуйте реализовать эти улучшения самостоятельно.

Несколько улучшить изображение и упростить программу можно, если отказаться от изменения цвета каждого отдельного символа.

Тогда видимую часть бегущей строки можно предварительно переписать в промежуточную строку ts и выводить сразу всю строку ts консольной функцией вывода строки cputs(). Цикл вывода строки при этом принимает следующий вид: 

while (1)

{ char ts [80];

while (MyTime()-oldT<V);

oldT=MyTime();

for(int k=k0,i=0;ts[i]=T[k],i++,ts[i]=0,i<h;)k=k>=strlen(T)-1?0:++k; gotoxy(tPos,5);

cputs (ts);   Вывод строки на экран

if (kbhit())

    { char c=getch();

         if(c==' ')textcolor(++color);

         if(c==27){next=0;break;}

    }

k0=k0>strlen(T)?0:++k0;

} Полностью программа записана в файле LifeLine.cpp.

В этом фрагменте интересен оператор формирования вспомогательной строки ts:

for(int k=k0,i=0;ts[i]=T[k],i++,ts[i]=0,i<h;)k=k>=strlen(T)-1?0:++k;

Во-первых, в теле цикла изменяется только позиция копируемого из исходной строки символа. Копирование символа в позицию i строки ts и занесение в следующую позицию нуля (признака конца строки) выполняется в заголовке. Мне удалось это сделать, только оставив третье выражение заголовка пустым.

Во-вторых, если перенести оператор изменения позиции k из предыдущего примера без изменения k=k>strlen(T)?0:++k;, проявляется допущенная там ошибка. Если в строку ts копируются несколько последних символов и начало исходной строки, то между ними записывается ноль и начало исходной строки не выводится. (Сделайте соответствующее изменение и запустите программу, чтобы увидеть разницу).

 

1.5.3. Форматный ввод вывод

 

1.5.4. Особенности обмена с потоками cin, cout, cerr в языке С++


 

1.6. Дополнительные сведения о функциях

1.6.1. Параметры функции main и обработка командной строки


 

1.6.2. Ссылочные переменные, передача ссылочных параметров


 

1.6.3. Встраиваемые (inline) функции


 

1.6.4. Функции с переменным числом параметров

 

 

 


Поделиться с друзьями:

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.