В предыдущей лекции мы уже упоминали, что модуль Crt, входящий в состав стандартных библиотек языка Pascal, содержит средства для работы с экраном в текстовом режиме.
Для того чтобы сделать работоспособными все описанные ниже процедуры и функции, ваша программа должна подключить стандартный модуль Crt:
uses crt;
Активная область ввода / вывода
Процедура Window(x1,y1,x2,y2: byte) создаст на экране окно с координатами левого верхнего угла в точке (x1,y1) и координатами правого нижнего угла в точке (x2,y2). Теперь активная область экрана будет ограничена этим окном. Текущие координаты курсора будут отсчитываться не от левого верхнего угла экрана, а от левого верхнего угла этого окна.
Очистка
Процедура ClrScr очистит весь экран (или активное окно); курсор будет помещен в верхний левый его угол.
Процедура ClrEol очистит текущую строку, начиная с текущей позиции курсора и до правого края экрана (окна).
Процедура DelLine удалит строку, в которой находится курсор.
Процедура InsLine очистит текущую строку целиком. Курсор останется на прежней позиции.
Цвета
Процедура TextBackground(color: byte) установит цвет фона.
Процедура TextColor(color: byte) установит цвет выводимого текста.
Замечание: Вместо номера цвета возможно использовать соответствующую константу (см. табл. 14.1).
Стандартная константа | Номер | Цвет | Стандартная константа | Номер | Цвет |
---|---|---|---|---|---|
black | 0 | Черный | darkgray | 8 | Темно-серый |
blue | 1 | Синий | lightblue | 9 | Ярко-синий |
green | 2 | Зеленый | lightgreen | 10 | Ярко-зеленый |
cyan | 3 | Голубой | lightcyan | 11 | Ярко-голубой |
red | 4 | Красный | lightred | 12 | Розовый |
magenta | 5 | Фиолетовый | lightmagenta | 13 | Ярко-фиолетовый |
brown | 6 | Коричневый | yellow | 14 | Желтый |
lightgray | 7 | Светло-серый | white | 15 | Белый |
Помимо этого, можно использовать константу blink = 128 (мерцание).
Звук
Процедура Sound(hz: word) включит звуковой сигнал с частотой hz герц.
Процедура NoSound выключит звуковой сигнал.
Позиционирование
Процедура GotoXY(x,y: byte) переместит курсор в заданную позицию в пределах текущего окна (экрана).
Функция WhereX: byte вычислит положение курсора в текущем окне (или на экране): его горизонтальную составляющую. Напомним, что координата X отсчитывается от левого края экрана (окна).
Функция WhereY: byte вычислит положение курсора в текущем окне (или на экране): его вертикальную составляющую. Напомним, что координата Y отсчитывается от верхнего края экрана (окна).
Ожидание
Процедура Delay(ms: word) приостановит исполнение программы на ms миллисекунд.
Функция KeyPressed: boolean отслеживает нажатия клавиш (на клавиатуре).
Функция ReadKey: char возвращает код символа, чья клавиша (или комбинация клавиш) была нажата.
Пример использования текстовой графики
Задача 1. Написать простейший скрин-сейвер (screen-saver) - программу, предохраняющую монитор от пережигания. Его основными чертами должны стать:
- преобладание черного фона;
- регулярная смена позиций цветовых пятен;
- прекращение работы при нажатии произвольной клавиши на клавиатуре.
Решение
program scrsav; uses crt; var n,i,x,y,c,t,z: word; err: integer; begin n:=10; if paramcount>0 then if paramstr(1)='?' then begin writeln('scrsav [density: byte] (=10 by default)'); halt end else begin val(paramstr(1),n,err); if (err<>0)or(n<=0) then n:=10; end; randomize; {активизация генератора случайных чисел} while not keypressed do begin y:= random(24)+1; {генерация случайного числа от 1 до 25} x:= random(79)+1; {генерация случайного числа от 1 до 80} z:= random(220)+33; {генерация случайного символа} c:= random(14)+1; {генерация случайного цвета от 1 до 15} gotoxy(x,y); textcolor(c); delay(n); write(chr(z)); for i:= 1 to 10 do begin y:= random(24)+1; {генерация случайного числа от 1 до 25} x:= random(79)+1; {генерация случайного числа от 1 до 80} gotoxy(x,y); textcolor(black); delay(n); write(' '); end; end.
Замечание: Параметр, регулирующий густоту и скорость изменения символов на экране, можно задавать как аргумент из командной строки во время вызова программы (см. лекцию 13).