Графика и псевдографика в Паскале

Модуль Crt

Позиции экрана для модуля Crt

Модуль Crt позволяет выводить цветные символы на цветном экране. Хотя по-прежнему отображение будет происходить в текстовом режиме. Текстовый режим означает, что на экране могут выводиться только определенные символы в определенных местах (знакоместах). Можно представить экран, разделенным вертикальными и горизонтальными линиями на ячейки. В эти ячейки можно «вписывать» различные символы. У каждой ячейки есть адрес.

Примечание. В Ubuntu модуль Crt не работает, если программу компилировать не в домашнем каталоге.

Модуль Crt содержит ряд процедур, позволяющих задавать цвет символов и экрана, очищать экран, менять позицию курсора и др.

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

Примечание. Если программа запускается в терминале Linux, то количество строк и столбцов определяется соответственно шириной и высотой экрана терминала. В случае попытки вывести символ за границами доступной области, он выводится в верхнем левом углу.

Количество доступных цветов (для экрана и символов) всего 16. Они кодируются числами от 0 до 15. Также вместо чисел можно прописывать названия цветов.

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

Чтобы очистить экран от всех надписей, требуется выполнить процедуру clrscr. Если перед этим был задан цвет экрана (с помощью textbackground), то экран будет залит соответствующим цветом.

Цвет текста определяется процедурой textcolor, позиция курсора – gotoxy.

Для вывода символов на экран используются стандартные процедуры write и writeln.

Также существует процедура временной задержки delay (аргумент задается в микросекундах), если требуется выводить символы не сразу, а постепенно.

uses
    crt;
 
begin
    textbackground (7);
    clrscr;
 
    textcolor (12);
    gotoxy (10,5);
    write ('Hi, world!');
 
    delay (1500);
 
    gotoxy (40,22);
    textcolor (14);
    write ('Yes');
 
readln
end.

Задачи к данной теме

Модуль Graph

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

Когда экран монитора работает в графическом режиме, то изображение на нем формируется из точек (пикселей), а не символов. Точка намного меньше символа, и, следовательно, на экране точек разместится куда больше, чем знакомест в текстовом режиме. Поэтому, несмотря на то, что система координат начинается также в левом верхнем углу, максимальные значения по двум осям намного больше, чем при работе с модулем Crt, и зависит от разрешения экрана. Отсчет в данном случае начинается с нуля.

Например, если размер экрана – 1024x768, то последняя точка имеет соответственно координаты 1023х767.

Чтобы при выполнении программы на Паскале запустился графический режим, требуется подключить модуль Graph.

Попробуем запустить графический режим и вывести что-нибудь на экран.

uses
    graph;
 
var
    g, h, i, x, y, c: integer;
 
begin
    g := detect;
    initgraph(g,h,'');
 
    setcolor(10);
    line(10,10, 300,300);
 
    x := 600;
    y := 500;
    randomize;
    for i := 1 to 50 do begin
        c := random (15);
        putpixel (x, y, c);
        x := x + 10;
        y := y - 5
    end;
 
readln
end.	

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

Запуск графического режима выполняется с помощью процедуры initgraph. После этого на экране должно появиться окно, «работающее» в графическом режиме.

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

Процедура line выводит линию. Первые два числа – это одна координата, а третье и четвертое число – другая.

Процедура putpixel рисует точки. Помимо координаты она принимает третий аргумент – цвет точки.

Процедура Line. “Звезды на экране”

uses
    graph;
 
var
    g, h, i, j, x, y, x2, y2: integer;
 
begin
    g := detect;
    initgraph(g,h,'');
 
    randomize;
    for i := 1 to 12 do begin
        setcolor(random(15));
        x := random(400) + 100;
        y := random(400) + 100;
        for j := 1 to 10 do begin
            x2 := x + random(40)-20;
            y2 := y + random(40)-20;
            line(x,y, x2, y2);
        end;
    end;
 
readln
end.	

Программа выводит на экран 12 «звездочек», каждая из которых содержит по 10 линий.

Координаты центральной точки каждой звездочки задаются случайным образом в диапазоне от 100 до 500 (400 + 100) пикселей.

Цвет также задается случайным образом.

Длина линий может быть до 20 пикселей и меньше.

Для вывода линии на экран используется процедура Line.

Процедура Circle. “Разноцветные окружности”

uses
    graph;
 
var
    g, h, i, x, y, r: integer;
 
begin
    g := detect;
    initgraph(g,h,'');
 
    randomize;
    for i := 1 to 30 do begin
        setcolor(random(15));
        x := random(1000) + 100;
        y := random(800) + 100;
        r := random(100);
        circle(x,y,r);
    end;
 
readln
end.	

Программа выводит на экран 30 окружностей разным цветом в разных местах окна.

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

Прямоугольники. Процедуры Rectangle, Bar и Setfillstyle

Модуль Graph включает несколько процедур для вывода на экран прямоугольников. Самая очевидная из них – это rectangle. Данная процедура принимает четыре параметра – координаты верхнего левого и нижнего правого угла. В результате получается прямоугольник без заливки. Цвет контура можно задать с помощью процедуры setcolor до того, как будет вызвана процедура rectangle.

Другой способ построения прямоугольников – это использование процедуры bar. В отличие от rectangle она выводит заполненный прямоугольник. Способ заливки и цвет задается с помощью процедуры setfillstyle, первый параметр которой – это стиль заливки (от 0 до 12, см. таблицу стилей заливки), а второй – цвет (от 0 до 15, см. таблицу цветов).

uses
    graph;
 
var
    g, h, i, x, y, r: integer;
 
begin
    g := detect;
    initgraph(g,h,'');
 
    rectangle(0,0,200,100);
 
    setfillstyle(1,10);
    bar(300,0,500,100);
 
    setfillstyle(2,15);
    bar(600,0,800,100);
 
    setfillstyle(3,1);
    bar(900,0,1100,100);
 
    setfillstyle(4,5);
    bar(200,100,300,300);
 
    setfillstyle(5,7);
    bar(500,100,600,300);
 
    setfillstyle(6,13);
    bar(800,100,900,300);
 
    setfillstyle(7,2);
    bar(0,300,200,500);
 
    setfillstyle(8,14);
    bar(300,300,500,500);
 
    setfillstyle(9,11);
    bar(600,300,800,500);
 
    setfillstyle(10,3);
    bar(900,300,1100,500);
 
    setfillstyle(11,12);
    bar(100,550,1000,650);
 
readln
end.

Вывод прямоугольников в графическом режиме на Паскале

Результат выполнения кода