Использование циклов для придания интерфейсу программ динамических функций

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

Рассмотрим их реализацию при помощи операторов ввода (read, readln) и вывода (write, writeln) самого языка Паскаль, а также подпрограмм из его стандартной библиотеки CRT.

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

Для того, чтобы пользователь успел проанализировать динамическое изменение изображения на экране, в тело цикла необходимо включать процедуру delay(ms), задающую паузу в работе программы на ms миллисекунд. За счет изменения времени паузы движение можно задавать неравномерным.

При задании перемещений элементам текстового интерфейса необходимо учитывать, что координаты знакомест символов на текстовом экране ограничены размерами [1:80] по горизонтали и [1:25] по вертикали. Необходимо расчетным путем прогнозировать контакт с границей экрана либо вставлять соответствующие проверки. Законы перемещения можно выбирать равномерные, неравномерные (с возрастанием времени паузы - замедление движения, с сокращением паузы - ускорение). Также можно задавать перемещения случайным образом.

Рассмотрим решение типовых задач изменения цвета и перемещения элементов вывода по текстовому экрану монитора.

Пример 1. Разработать программу, реализующую перемещение произвольной строковой переменной (слова) Str вдоль первой строки текстового поля экрана монитора слева направо с возрастающей скоростью (начальное время задержки 200 мс, на каждом шаге убывает на 5, но не должно быть меньшим 5 мс). При достижении границы экрана перемещение слова заканчивается и программа завершает свою работу.

Решение. Введем дополнительно целочисленную переменную LPass для задания числа пробелов в первой строке перед выводом слова.Применяя функцию Length для определения длины строковой переменной Str, получим следующий код:

program move_word_left_right;

uses Crt;

var N,i,LPass:integer;Str:string;

begin{открытие тела программы}

ClrScr; writeln('Vvedite slovo');{начальная очистка экрана, запрос на ввод слова Str }

Readln (Str); N:= Length(Str);{ ввод слова Strиопределение его длины N }

LPass:=1; i:=200;{задание начальных значений величинLPass, i}

while(N+LPass)<=80 do{проверка окончания цикла - умещается ли пропуск и слово в строке}