Использование графики и звука в языке Turbo Pascal
Прежде, чем приступить к созданию графических программ на Turbo Pascal,
необходимо ознакомиться с богатейшими графическими возможностями этого
языка, сосредоточенными в стандартных модулях (библиотеках)
GRAPH и
CRT (название
CRT происходит от Cathode-Ray Tube электронно-лучевая трубка).
Эти модули содержат описания стандартных констант, процедур и функций,
используемых при работе с монитором в текстовом и графическом режимах.
-
При работе в текстовом режиме экран
монитора разбивается на строки, строки на позиции, в каждую из которых
можно поместить один символ. Положение символа на экране задается двумя
координатами вертикальной X и горизонтальной Y. X это номер позиции
в строке, а Y номер строки. Чаще всего на экране в текстовом режиме размещается
25 строк по 80 позиций.
-
При работе в графическом режиме весь
экран разбивается на отдельные точки "пикселы". Положение пиксела
также задается двумя координатами X и Y. Координата X увеличивается слева
направо, а координата Y сверху вниз. Количество пикселов на экране зависит
от типа графического адаптера и для распространённого адаптера VGA составляет
640 х 480.
Подключение модулей CRT и GRAPH к программе осуществляется с помощью
ключевого слова Uses (англ. uses использует) :
Uses
Crt, Graph;
В системе программирования Turbo Pascal имеется хорошо развитая встроенная
служба помощи, позволяющая получать подробное описание стандартных
подпрограмм с примерами их применения. Поэтому ниже приведены только
названия, описание параметров и назначение наиболее употребительных процедур
и функций.
8.1. Модуль C R T
Модуль CRT содержит описания констант,
процедур и функций, обеспечивающих управление текстовым режимом работы монитора
и звуковым генератором. |
Процедуры
ClrScr Очищает экран или окно и
помещает курсор в верхний левый угол.
Delay(D: Word) Приостанавливает
работу программы на указанное число D миллисекунд. Практически время задержки
зависит от тактовой частоты процессора.
GotoXY(X, Y: Byte) Перемещает курсор
в позицию X строки Y экрана.
NoSound Выключает источник звука.
Sound(F: Word) Запускает источник
звука с частотой F (Гц).
TextBackGround(Color:Byte) Устанавливает
цвет фона.
TextColor(Color: Byte) Устанавливает
цвет символов.
Window(X1, Y1, X2, Y2: Byte) Определяет
текстовое окно на экране. X1, Y1 координаты левого верхнего угла окна,
X2, Y2 правого нижнего угла окна.
Функции
KeyPressed: Boolean Анализирует
нажатие клавиши. Результат TRUE, если на клавиатуре нажата клавиша (кроме
Alt, Ctrl и т.п.), и FALSE в противном случае. Не задерживает исполнение
программы.
ReadKey: Char Читает символ с клавиатуры
без эхоповтора на экране. Приостанавливает исполнение программы до нажатия
на любую клавишу, кроме Alt, Ctrl и т.п.
8.1. Модуль G R A P H
Модуль Graph содержит константы, процедуры
и функции для управления графическим
режимом работы монитора.
|
Константы цвета
Black = 0; {Черный}
Blue = 1; {Синий}
Green = 2; {Зеленый}
Cyan = 3; {Голубой}
Red = 4; {Красный}
Magenta = 5; {Фиолетовый}
Brown = 6; {Коричневый}
LightGray = 7; {Светлосерый} |
DarkGray = 8; {Темносерый}
LightBlue = 9; {Яркосиний}
LightGreen = 10; {Яркозеленый}
LightCyan = 11; {Яркоголубой}
LightRed = 12; {Розовый}
LightMagenta = 13; {Малиновый}
Yellow = 14; {Желтый}
White = 15; {Белый} |
Константы типов и толщины линий
SolidLn = 0; {Сплошная}
DottedLn = 1; {Точечная}
CenterLn = 2; {Штрихпунктирная} |
DashedLn = 3; {Пунктирная}
NormWidth=1; {Нормальная толщина}
ThickWidth = 3; {Тройная толщина} |
Константы шаблона штриховки
EmptyFill = 0;
SolidFill = 1;
LineFill = 2;
LtSlashFill = 3;
SlashFill = 4;
BkSlashFill = 5;
LtBkSlashFill = 6;
HatchFill = 7;
XHatchFill = 8;
InterleaveFill = 9;
WideDotFill = 10;
CloseDotFill = 11;
UserFill = 12. |
{Заполнение цветом фона}
{Сплошная штриховка}
{Горизонтальная штриховка}
{/// штриховка}
{/// штриховка толстыми линиями}
{\\\ штриховка толстыми линиями}
{\\\ штриховка}
{Заполнение прямой клеткой}
{Заполнение косой клеткой}
{Заполнение частой сеткой}
{Заполнение редкими точками}
{Заполнение частыми точками}
{Тип задается пользователем} |
Процедуры
Arc(X, Y: Integer; U1, U2, R: Word) Строит
дугу окружности текущим цветом с текущими параметрами линии. X, Y координаты
центра дуги, U1 угол до начальной точки дуги, отсчитываемый против часовой
стрелки от горизонтальной оси, направленной слева направо, U2 угол до
конечной точки дуги, отсчитываемый так же, как U1, R радиус дуги.
Bar(X1, Y1, X2, Y2: Integer) Строит
прямоугольник, закрашенный текущим цветом с использованием текущего стиля
(орнамента, штриховки). X1, Y1, X2, Y2 координаты левого верхнего и правого
нижнего углов прямоугольника.
Bar3D(X1, Y1, X2, Y2: Integer; Glubina:
Word; Top: Boolean) Строит параллелепипед, используя текущий стиль
и цвет. X1, Y1, X2, Y2 координаты левого верхнего и правого
нижнего углов передней грани; Glubina ширина
боковой грани (отсчитывается по горизонтали),
Top признак включения верхней грани (если True верхняя грань вычерчивается,
False не вычерчивается).
Circle(X, Y: Integer; R: Word) Рисует
текущим цветом окружность радиуса R c центром в точке (X,Y).
ClearDevice Очищает графический
экран, закрашивает его в цвет фона.
ClearViewPort Очищает выделенное
графическое окно, закрашивает его в цвет фона.
CloseGraph Закрывает графический
режим, т.е. освобождает память, распределенную под драйверы графики и файлы
шрифтов, и восстанавливает текстовый режим работы экрана.
Ellipse(X, Y: Integer; U1, U2, XR, YR:
Word) Рисует дугу эллипса текущим цветом; X, Y координаты центра
эллипса; U1, U2 углы до начальной и конечной точек дуги эллипса (см.
процедуру Arc); XR, YR горизонтальная и вертикальная полуоси эллипса.
FillEllipse(X, Y: Integer; XR, YR: Word)
Рисует заштрихованный эллипс, используя X,Y как центр и XR,YR как горизонтальную
и вертикальную полуоси эллипса.
FillPoly(N: Word; Var PolyPoints)
Рисует и штрихует многоугольник, содержащий N вершин с координатами в PolyPoints.
InitGraph(Var Driver, Mode: Integer; Path:
String) Организует переход в графический режим. Переменные Driver
и Mode содержат тип графического драйвера и его режим работы. Третий параметр
определяет маршрут поиска графического драйвера. Если строка пустая (т.е.
равна ''), считается, что драйвер находится в текущем каталоге.
Line(X1, Y1, X2, Y2: Integer) Рисует
линию от точки X1, Y1 до точки X2,Y2.
LineTo(X, Y: Integer) Рисует линию
от текущего указателя к точке X,Y.
MoveTo(X, Y: Integer) Смещает текущий
указатель к точке X,Y.
OutTextXY(X, Y: Integer; TextString: String)
Выводит текст в заданное место экрана.
PieSlice(X, Y: Integer; U1, U2, Radius:
Word) Строит сектор круга, закрашенный текущей штриховкой и цветом
заполнения. X, Y координаты центра сектора круга; U1 и U2 начальный
и конечный углы сектора, отсчитываемые против часовой стрелки от горизонтальной
оси, направленной вправо; Radius радиус сектора.
PutPixel(X, Y: Integer; Color: Word) Выводит
точку цветом Color с координатами X, Y.
Rectangle(X1, Y1, X2, Y2) Рисует
контур прямоугольника, используя текущий цвет и тип линии. X1, Y1 координаты
левого верхнего угла прямоугольника, X2, Y2 координаты правого нижнего угла прямоугольника.
Sector(X, Y: Integer; U1, U2, XR, YR: Word)
Рисует и штрихует сектор эллипса радиусами XR, YR с центром в X, Y от начального
угла U1 к конечному углу U2.
SetBkColor(Соlor: Word) Устанавливает
цвет фона.
SetColor(Соlor: Word) Устанавливает
основной цвет, которым будет осуществляться рисование.
SetFillStyle(Pattern, Color: Word)
Устанавливает образец штриховки и цвет.
SetLineStyle(LineStile, Pattern, Thickness:
Word) Устанавливает толщину и стиль линии.
SetTextStyle(Font, Direction, CharSize:
Word) Устанавливает текущий шрифт, направление
(горизонтальное или вертикальное) и размер текста.
SetViewPort(X1, Y1, X2, Y2: Integer; ClipOn:
Boolean) Устанавливает прямоугольное окно на графическом экране.
Параметр ClipOn определяет "отсечку" элементов изображения, не умещающихся
в окне.
Функции
GetMaxX и GetMaxY Возвращает значения
максимальных координат экрана в текущем режиме работы, соответственно,
по горизонтали и вертикали.
GraphResult Возвращает значение
GrOk, соответствующее коду 0, если все графические операции программы выполнились
без ошибок, или возвращает числовой код ошибки (от 1 до 14).
8.3. Примеры графических программ
Эти примеры иллюстрируют основные моменты, возникающие при написании
графических программ:
-
установку и закрытие графического режима;
-
задание графических окон;
-
вывод точек, линий, текста;
-
использование различных шрифтов;
-
установку цвета, палитры, типа штриховки;
-
построение графических фигур (прямоугольников, многоугольников, дуг, окружностей,
эллипсов, секторов);
-
простейшие приемы анимации и звукового оформления.
Даются окончательные подробно откомментированные тексты программ, которые
могут служить основой для программ читателя. Для
их работы необходимо наличие библиотечного файла GRAPH.TPU,
драйвера видеорежима EGAVGA.BGI (или другого, в зависимости от типа монитора)
и файлов шрифтов (*.chr).
Из-за недостатка места некоторые программы не содержат действий по
выдаче сообщений о возможных ошибках графики, хотя они очень важны.
Содержание:
- Пример 8.1. Эта программа демонстрирует работу процедур
управления текстовым выводом на экран дисплея.
- Пример 8.2. Эта программа демонстрирует возможности изображения линий
в графическом режиме.
- Пример 8.3. Эта программа демонстрирует возможности изображения символов
в графическом режиме...
- Пример 8.4. Эта программа рисует закрашенный прямоугольник, меняя случайным
образом цвет, тип штриховки и высоту тона звукового сопровождения.
- Пример 8.5. Эта программа рисует на экране звезду и закрашивает её,
используя 12 типов штриховки.
- Пример 8.6. Программа демонстрирует получение эффекта движения изображения
прицела под управлением клавишей-стрелок клавиатуры с выводом координат
центра прицела.
- Пример 8.7. Программа рисует человечка, делающего утреннюю зарядку.
- Пример 8.8. Эта программа демонстрирует возможности изображения объёмных
предметов и столбиковых диаграмм.
- Пример 8.9. Эта программа демонстрирует работу с пикселами, случайными
эллипсами и секторами.
- Пример 8.10. Программа изображает планету, вращающуюся вокруг Солнца на фоне
мерцающих звезд и расходящейся галактики.
- Пример 8.11. Программа рисует прямоугольную систему координат, отображает
в ней заданное множество точек и строит все возможные пары треугольников
с вершинами в этом множестве такие, чтобы один треугольник лежал строго
внутри другого.