78214

Стандартные процедуры и функции модуля GRAPH

Лекция

Информатика, кибернетика и программирование

Основная часть средств Pascal размещена в стандартных модулях. Модуль – это библиотека, которая содержит константы, описания типов данных, переменные и функции. Наиболее часто используются модули System, Dos, Graph, Crt

Русский

2015-02-07

124.5 KB

6 чел.

екция: Стандартные процедуры и функции модуля GRAPH         8 из 8

Оглавление

[1] Оглавление

[2] Графические возможности языка Pascal

[2.1] Работа в графическом видеорежиме

[2.2] Инициализация графического режима

[2.3] Управление экраном и окнами

[2.4] Управление цветом и фоном

[2.5] Построение простейших графических изображений

[2.5.1] Отображение точки

[2.5.2] Отображение отрезков прямых линий

[2.5.3] Построение прямоугольников

[2.5.4] Построение дуг, эллипсов и окружностей

[2.6] Управление курсором

[2.7] Вывод текстовой информации в графическом видеорежиме

[2.8] Алгоритм построения окон и статических объектов в них

[2.9] Реализация имитации движения графических объектов

[3] Контрольные вопросы:

Комбинированный урок №17

Тема: Стандартные процедуры и функции модуля GRAPH. Методы создания анимации.

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

Графические возможности языка Pascal

Основная часть средств Pascal размещена в стандартных модулях. Модуль – это библиотека, которая содержит константы, описания типов данных, переменные и функции. Наиболее часто используются модули System, Dos, Graph, Crt и др. Процедуры и функции модуля System подключаются автоматически и обеспечивают управление выполнением программ, обработку строк, файлов, управление  динамической памятью, производят математические расчеты и другие действия.

Модуль Dos поддерживает большинство функций операционной системы и некоторые функции обработки файлов. Модуль Crt содержит процедуры и функции управления текстовым  экранным режимом, использования цветов, окон и звуков. Модуль Graph обеспечивает работу в графическом видеорежиме.

Работа в графическом видеорежиме

Работа в графическом режиме выполняется с помощью предопределенных констант, типов, процедур и функций стандартного модуля Graph (файл Graph.tpu). В этом режиме любое изображение на экране дисплея синтезируется из множества мельчайших элементов, называемых пикселями (пэлами – picture element). Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между соседними пикселями отсутствуют. Если группа смежных пикселов светится, то они воспринимаются не как совокупность отдельных точек, а как сплошной участок.

В графическом режиме можно управлять цветом отдельных пикселов экрана. Из цветных точек составляются линии, фигуры и целые графические объекты. Таким образом, на экране дисплея может быть создано любое графическое изображение. Каждый пиксель имеет свои координаты.  GetmaxX : integer и GetmaxY : integer – стандартные функции модуля Graph, которые автоматически подсчитывают максимальное значение координат.

Количество пикселов по горизонтали и вертикали зависит от аппаратуры – адаптера монитора.

Адаптер – это специальная плата внутри корпуса компьютера. Адаптер состоит из  микросхемы (видеопроцессор), нескольких портов ввода-вывода (специальные разъемы), постоянного запоминающего устройства с матрицами знаков, а также видеопамяти, где содержится графическое изображение. Компьютеры могут комплектоваться следующими типами графических адаптеров:

CGA - 640×200  (столбцовстрок) пикселов

EGA - 640×350

VGA - 640×480

SVGA( SuperVGA) -  1024×768 и др.

Работу графического адаптера поддерживает специальная программа, называемая драйвером. Это служебная программа, которая загружается в компьютер вместе с операционной системой. Загрузочный модуль драйвера хранится в специальном файле с расширением .bgi (Borland Graphics Interface). Файлы с расширением .bgi находятся в каталоге BGI.

Соотношение драйверов и адаптеров следующие:

CGA.bgi  CGA, MCGA

EGAVGA.bgi  EGA, VGA

IBM8514.bgi  IBM8514

HERG.bgi  Hercules (монохромный адаптер) и т.д.

Каждому типу драйвера в модуле Graph соответствует своя константа, например:

Direct=0; (требуется автоматическое определение )

CGA=1;

MCGA=2;

EGA=3;

VGA=9.

Используемый драйвер может функционировать в различных режимах. Для выбора конкретного режима драйвера в модуле Graph содержится список констант. Значения некоторых из них описаны в таблице 1.

Таблица 1

Имя константы

Значение

Разрешающая способность

Кол-во цветов

Кол-во видеостраниц

VGALo

0

640200

16

4

VGAMed

1

640350

16

2

VGAHi

2

640480

16

1

IBM8514Lo

0

640480

256

1

IBM8514Hi

1

640768

256

1

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

HelpСontens UnitsGraphGo to GRAPH.TPU Functions and Procedures или нажав комбинацию клавиш CTRL F1.

Инициализация графического режима

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

Инициализация графического режима выполняется процедурой InitGraph:

InitGraph (<драйвер>:integer; <режим>:integer;<путь к файлу>:string);.

Для инициализации графического режима с автоматическим распознаванием драйвера и режима, достаточно присвоить переменной, отвечающей за драйвер, константу Detect или 0. Присваивать какое-либо значение переменной режима в этом случае не требуется. Третий параметр указывает путь к файлу (например, EGAVGA) с расширением bgi. Если этот файл находится в текущем каталоге, то путь может быть пустым (‘’).

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

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

Пример 1. При частой работе с графикой процесс инициализации удобно оформить отдельной процедурой.

Uses Graph;

Var Driver, Mode:integer;

Procedure GrInit;

Begin

  Driver:=Detect; { автораспознавание драйвера }

  InitGraph (Driver, Mode, ‘’);

  If GraphResult<>0 then

    begin

       Writeln ('Ошибка инициализации!');

       Writeln ('Работа программы прервана');

       Halt (1) { остановить выполнение программы с кодом завершения – 1 }

   End

End;

Begin

 GrInit; { графические действия }

 Readln;

 CloseGraph

End.

Управление экраном и окнами

В графическом режиме поддерживается концепция окон. Окно представляет собой прямоугольную область экрана со своей относительной системой координат. По умолчанию окно занимает весь экран, значения координат его левого верхнего и правого нижнего угла устанавливаются автоматически процедурой инициализации (например (0,0) и (640,480)).

Чтобы стереть все изображение на экране, т.е. очистить его, используется процедура без параметров ClearDevice или процедура GraphDefaults, которая не только очищает экран, но и выполняет все стартовые  установки графических параметров.

Процедура SеtViewPort (X1,Y1,X2,Y2:integer; Clip:boolean); служит для организации окон. Здесь X1,Y1 – координаты левого верхнего угла, X2,Y2 – координаты правого нижнего угла. Параметр Clip определяет, будут ли фрагменты изображения отсекаться при попадании за пределы окна (Clip=True или Clip=ClipOn) или нет (Clip=False или Clip=ClipOff). После создания окна началом координат станет верхний левый угол окна, который будет иметь координаты (0,0).

Процедура ClearViewPort; используется для очистки окна. Текущее окно при этом заполняется фоновым цветом, а текущий указатель устанавливается в точку с координатами (0,0). Напомним, что это координаты во внутренней системе координат, связанной с данным окном, а не в системе координат полного экрана. Перейти к системе координат полного экрана можно с помощью процедуры ClearDevice, или задав в процедуре установки окна максимально возможные значения: SetViewPort(0,0,GetMaxX, GetMaxY, True);.

Управление цветом и фоном

Во время инициализации графического режима устанавливается палитра цветов. Палитрой называется максимальный набор цветов, поддерживаемых BGI–драйвером. Она включает 16 цветов, пронумерованных от 0 до 15, которые используются по умолчанию в режимах 640480 для VGA (и для EGA) как в текстовом, так и в графическом режиме.

Таблица  2  Названия цветов на английском и русском языках и их номера.

Имя цвета

Номер цвета

Название цвета

Black

Blue

Green

Cyan

Red

Magenta

Brown

LightGray

DarkGray

LightBlue

LightGreen

LightCyan

LightRed

LightMagenta

Yellow

White

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

черный

синий

зеленый

голубой

красный

фиолетовый

коричневый

светло-серый

темно-серый

светло-синий

светло-зеленый

светло-голубой

светло-красный

светло-фиолетовый

желтый

белый

Для установки цвета изображения и окна применяются процедуры SetColor и SetBkColor.

Процедура SetColor(<цвет>:word); служит для задания цвета, которым будут обозначены контуры фигуры или текста. Если в качестве цвета указан недопустимый номер цвета, то текущий цвет не изменяется.

Процедура SetBkColor (<цвет>:word); устанавливает новый цвет фона.

Построение простейших графических изображений

 Отображение точки

Какие бы изображения не выводились на экран, все они построены из точек.

Процедура PutPixel(X,Y:integer; Color:word); отображает точку на экране, где Х и Y – экранные координаты точки, Color – ее цвет.

Пример 2. Пример программы, при выполнении которой создается интересный визуальный эффект путем заполнения экрана множеством точек различных цветов.

Uses Graph;

Var Driver, Mode:integer;

Color:word;

X,Y:word;

Procedure GrInit;

Begin

  Driver:=Detect; { автораспознавание драйвера }

  InitGraph (Driver, Mode, ‘’);

  If GraphResult<>0 then

    begin

       Writeln ('Ошибка инициализации!');

       Writeln ('Работа программы прервана');

       Halt (1) { остановить выполнение программы с кодом завершения – 1 }

   End

End;

Begin

GrInit; { графические действия }

Color:=0;

Randomize;

Repeat {выберем случайным образом координаты точки}

X:=Random(GetMaxX);

Y= Random(GetMaxY);

PutPixel(X,Y,Color); {вывод точки}

Inc (Color); {изменение цвета}

If Color=GetMaxColor Then Color:=0; {не превышает ли значение цвета}

{максимального значения, которое}

{определяет функция GetMaxColor?}

Until KeyPressed; {повторять до нажатия любой клавиши}

ClearDevice;

CloseGraph

End.

Отображение отрезков прямых линий

Процедура Line(X1,Y1,X2,Y2:integer); выводит на экран отрезок прямой линии. Здесь X1,Y1 – координаты начальной точки, а X2,Y2 – координаты конечной точки отрезка.

Для построения отрезков можно применять также следующие процедуры:

LineTo(X,Y); – проводит отрезок из текущей точки до точки с координатой (X,Y);

LineRel(dX,dY); – проводит отрезок из текущей точки до точки, удаленной от нее на расстояние (dX,dY). Линии можно вычерчивать самых различных стилей: тонкие, широкие, штриховые, пунктирные и т.д.  

Процедура SetLineStyle(<тип линии>:word;<узор(шаблон)>:word;<толщина линии>:word); производит установку стиля.

Таблица 3. Константы типа линий и их толщины

Константа

Значение

Характеристика линии

SolidLn

DottedLn

CenterLn

DashedLn

UserBitLn

0

1

2

3

4

Сплошная линия

Точечная линия

Штрихпунктирная линия

Пунктирная линия

Тип линии, определяемый пользователем

NormWidth

ThickWidth

1

3

Нормальная толщина линии

Жирная линия

Если тип линии не равен UserBitLn, то параметр “узор(шаблон)” не используется и обычно задается равным нулю, например SetLineStyle(0,0,3)-  стиль линии – сплошная,  жирная.

Построение прямоугольников

Процедура Rectangle(X1,Y1,X2,Y2:integer); строит изображение прямоугольника на плоскости. Здесь X1,Y1 – координаты левого верхнего угла, X2,Y2 – координаты правого нижнего угла прямоугольника. При этом используется текущий цвет SetColor и стиль линии SetLineStyle. Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.

Процедура Bar(X1,Y1,X2,Y2:integer); позволяет строить более эффектные прямоугольники. Она рисует прямоугольник, внутренняя область которого залита по текущему шаблону. Обычно используется в деловой графике для построения столбиковых диаграмм, а также для “закраски” графического окна, чтобы фон графического окна не сливался с общим фоном экрана.

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

Процедура SetFillStyle(<шаблон>:word; <цвет>:word); устанавливает шаблон и  цвет заполнения замкнутой фигуры.

Таблица 4. Константы шаблонов закраски

Константа

Значение

Описание узора

EmptyFill

SolidFill

LineFill

LtSlashFill

SlashFill

BkSlashFill

LtBkSlashFill

HatchFill

XhatchFill

InterleaveFill

WideDotFill

CloseDotFill

UserFill

0

1

2

3

4

5

6

7

8

9

10

11

12

Закраска области фоновым цветом

Сплошная закраска области текущим цветом

Закраска линиями –

Закраска линиями ///

Закраска жирными линиями ///

Закраска жирными линиями \\\

Закраска линиями \\\

Закраска редкой штриховкой

Закраска частой штриховкой (в обоих направлениях)

Закраска прерывистой линией

Закраска линией из редких точек

Закраска линией из частых точек

Закраска определяемая программистом

Процедура FloodFill(X,Y:integer; Border:word); заполняет ограниченную область текущим цветом и стилем заполнения (SetFillStyle). Граница закрашиваемой области высвечивается цветом, заданным в Border.

Если точка (X,Y) находится внутри области, то эта область закрашивается, если же она расположена вне области, то заполняется внешняя часть области.

Построение дуг, эллипсов и окружностей

Процедура Arc(X,Y:integer; 1, 2,R:word); строит дугу. Здесь X,Y – центр окружности дуги, 1, 2 – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, R – радиус. Если 1=00, а 2=3600, то вычерчивается полная окружность.

Процедура Ellipse(X,Y:integer; 1,2,Rx,Ry:word); предназначена для построения эллиптических дуг. Здесь X,Y – центр эллипса, 1, 2 – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, Rх и Ry – горизонтальная и вертикальная полуоси. Если 1=00, а 2=3600, то вычерчивается полный эллипс.

Процедура FillEllipse(X,Y:integer; Rx,Ry:word); строит полный закрашенный эллипс.

Процедура Circle(X,Y:integer; R:word); выводит на экран изображение окружности с центром X,Y и радиусом R. Окружность рисуется цветом, заданным SetColor.

Процедура PieSlice(X,Y:integer; 1,2,R:word); выводит на экран изображение закрашенного сектора круга, используя в качестве центра круга точку X,Y, начального угла 1, конечного угла 2 и радиуса R. Контур сектора высвечивается текущим цветом. При заполнении сектора используются шаблон и цвет, установленные процедурой SetFillStyle. Если 1=00, а 2=3600 то на экран выводится закрашенная окружность.

Процедура Sector(X,Y:integer; 1, 2,Rx,Ry:word); строит закрашенный сектор эллипса.

Управление курсором

Чтобы построить изображение, необходимо обязательно указать начальную позицию. В текстовом режиме эту позицию определяет положение курсора, который размещается каждый раз за последним отображенным символом и указывает на местоположение следующего. В графическом режиме видимого курсора нет, но есть невидимый текущий указатель СР (Current Point), выполняющий те же функции, что и курсор в текстовом режиме. Текущий указатель называют также графическим курсором.

Для определения текущих координат графического курсора используют функции GetX:integer и GetY:integer.

Для перемещения графического курсора используют процедуры MoveTo и MoveRel.

Процедура MoveTo(X,Y:integer); перемещает текущий указатель в точку с координатами X,Y. Процедура MoveRel(dX,dY:integer); перемещает текущий курсор в точку, которая находится на расстоянии dX,dY от текущей позиции. При задании положительных значений dX или dY значения соответствующих координат увеличиваются, при задании отрицательных – уменьшаются.

Вывод текстовой информации в графическом видеорежиме

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

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

В графическом видеорежиме вывод текстовой информации выполняется с помощью штриховых и побитовых (растровых, матричных) шрифтов. В штриховых шрифтах при построении символа используется векторный способ (символ определяется серией отрезков). Побитовый или растровый шрифт определен матрицей 8×8 пикселов для каждого символа.  Главное отличие штриховых шрифтов от растровых состоит в том, что при увеличении размера символов растрового шрифта качество изображения ухудшается, а при увеличении размера символов штрихового шрифта – не ухудшается.

Каждый штриховой шрифт хранится в соответствующим файле с расширением .chr.  Необходимо, чтобы файлы *.chr находились в том же каталоге, что и файлы графических драйверов (*.bgi).

Стандартный набор шрифтов может включать 9 шрифтов, однако не все из них подключают русский алфавит.

Таблица 5. Константы некоторых типов шрифтов

Константа

Значение

Название шрифта

DefaultFont

TriplexFont

SmallFont

SansSerifFont

GothicFont

0

1

2

3

4

Растровый шрифт 8×8

Полужирный шрифт

Тонкий шрифт

Рубленный шрифт

Готический шрифт

По умолчанию принимается растровый шрифт DefaultFont размера 1.

Процедура SetTextStyle(Font:word; Direction:word; CharSize:word); служит для установки шрифта. В ней Font задает шрифт, Direction – ориентацию и направление вывода символов, CharSize – размер отображаемых символов. Direction может принимать значение HorizDir=0 (направление слева направо) или VertDir=1 (направление снизу вверх.). Если указать Direction=2, то каждый символ будет повернут на 90° против часовой стрелки (т.е. окажется "лежащим на боку") и вывод будет производиться в горизонтальном направлении, однако не все шрифты поддерживают этот режим.

Параметр CharSize (размер символов) может принимать целочисленные значения от 0 до 10, причем 0 соответствует размеру, стандартному для данного шрифта, а 10 является максимальным размером,  но не для всех шрифтов.

Процедура SetUserCharSize(MultX, DivX, MultY, DivY:word); позволяет управлять размером символов. Здесь первые два параметра задают размер по горизонтали,  два следующие – по вертикали. Если принять за 1 значение ширины символа стандартного шрифта, то отношением MultX/DivX задается ширина символа шрифта, а MultY/DivY –  высота.

Вывод тестовой информации на экран в графическом режиме выполняется процедурами OutText и OutTextXY.

Процедура OutText(TextString:string); выводит на экран строку текста, начиная с текущего положения указателя.

Процедура OutTextXY(X,Y:integer; TextString:string); выводит строку текста, начиная с точки, имеющей координаты (X,Y).

Алгоритм построения окон и статических объектов в них

Задача 1. Построить два окна на одном экране. В первом окне вывести разноцветные концентрические окружности, радиус которых пропорционально возрастает, и вложенные одноцветные прямоугольники, размеры которых пропорционально возрастают. Во втором окне вывести текст "Кто владеет информацией, тот владеет миром" .

Program window2;

 Uses Graph;

Var I, Driver, Mode:integer;

Procedure GrInit;

Begin

Driver:=Detect; { автораспознавание драйвера }

InitGraph (Driver, Mode, ‘’);

If GraphResult<>0 then

begin

Writeln ('Ошибка инициализации!');

Writeln ('Работа программы прервана');

Halt (1) { остановить выполнение программы с кодом завершения – 1 }

End

End;

Begin

GrInit; { графические действия }

ClearDevice;      {построение первого окна и рисунков в нем:}
SetColor
(1);
SetViewPort
(0,0,GetMaxX-1,GetMaxY-1,true);

Rectangle(0,0,GetMaxX-1,GetMaxY-1);

SetFillstyle(1,11);

Bar(0,0,GetMaxX-1,GetMaxY-1);

for i:=0 to 120 do

begin

setcolor(Random(15));

circle(2*i,2*i,i);

end;

SetColor(0);

for i:=50 downto 1 do rectangle(320+i*3,40+i,320+i*4,50+i*6);

{построение второго окна и вывод текста в нем:}

setviewport(0,401,GetMaxX-1,GetMaxY-1,true);

SetFillstyle(1,14);

Bar(0,0,GetMaxX-1,GetMaxY-1);

SetColor(6);

Rectangle(0,1,GetMaxX-1,GetMaxY-1);

Setcolor(0);

SetTextStyle(0,0,1);

OutTextXY(150,35,’КТО ВЛАДЕЕТ ИНФОРМАЦИЕЙ, ТОТ ВЛАДЕЕТ МИРОМ.’);

Readln;

CloseGraph

End.

Реализация имитации движения графических объектов

Создать видимость движения на экране можно двумя способами. Первый способ заключается в том, что имитация движения объекта на экране создается за счет многократного выполнения программой набора действий: нарисоватьпаузастереть рисунок (нарисовать его в том же месте цветом фона) – изменить координаты изображения. Перед началом составления программы надо продумать описание "двигающегося" объекта; характер изменения координат, определяющих текущее положение объекта; диапазон изменения и шаг.

Задача 1. Организовать имитацию движения по экрану компьютера автомобиля.

Program automoto;

Uses Graph;

Var u,gm,gd:integer;

BEGIN

gd:=detect;

initgraph(gd,gm,’’);

if graphresult<>0 then halt(1);

setviewport(1,1,600,450,true);

setbkcolor(lightgray); setcolor(brown);

line(1,401,700,401);{нарисовали дорогу}

u:=1;

while u<= 600 do 

begin

 setcolor(darkgray);

 rectangle(40+u,315,90+u,350);  {кабина машины}

 setfillstyle(1,darkgray);

 bar(5+u,350,120+u,390);    {кузов машины}

 setfillstyle(1,yellow);

 setcolor(yellow);

 line(121+u,360,160+u,400); line(160+u,400,200+u,400); {свет от фар машины }

 line(200+u,400,121+u,360); floodfill(180+u,399,yellow);

 pieslice(40+u,385,0,360,15); pieslice(90+u,385,0,360,15); {нарисуем колеса}

 delay(30);

 setfillstyle(1,lightgray); bar(5+u,300,210+u,400); {очистка места расположения машины}

 u:=u+3

end;

 readln;

 closegraph

END.

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

Для хранения фрагмента удобнее всего использовать динамическую область памяти. Получить размер памяти в байтах, необходимой для сохранения образа фрагмента, позволяет функция ImageSize(X1,Y1,X2,Y2: integer): word. Здесь X1,Y1 и X2,Y2 – координаты верхнего левого и нижнего правого углов прямоугольника. Если полученный размер памяти больше 64Кб, то значение ImageSize=0, a GraphResult= -11. Чтобы этого избежать, следует сохранять изображение по частям. Полученный с помощью функции ImageSize размер памяти применяют в качестве входной информации для процедуры GetMem(p,Size), которая выделяет указанный объем памяти в динамической области: Здесь р – указатель на область памяти, Size – ее размер.

Процедура GetImage(X1,Y1,X2,y2:integer; var BitMap:word); сохраняет образ фрагмента в памяти, где X1,Y1,X2,Y2 – координаты фрагмента, BitMap – переменная, которая указывает, где сохраняется образ изображения.

Процедура PutImage(X,Y:integer; var BitMap, Mode:word); восстанавливает сохраненный в буфере BitMap прямоугольник, левый верхний угол которого задается координатами X,Y. Параметр Mode задает режим вывода изображения.

Задача 1. Построить на экране компьютера башню, имитируя процесс ее построения снизу вверх.

 Uses Graph;

 Var P:pointer;  {указатель на область}

Size:Word;  {размер области}

X1,Y1:Word; {координаты начальной точки}

 gd,gm:integer;

 Begin

gd:=detect;

 InitGraph(gd,gm,’’);

IF GraphResult<>0 THEN Halt(1);

 SetViewPort(0,0,640,80,TRUE);

 ClearViewPort;

 SetBkColor(black); SetColor(yellow);

 SetLineStyle(0,1,Thickwidth);

 Rectangle(120,400,200,440); {рисуем первый кирпич башни}

 Size:=ImageSize(120,400,200,400); {определяем размер области}

 GetMem(p,Size);   {выделяем память для области}

 GetImage(120,400,200,440,P^);  {сохраняем область в памяти}

 Y1:=400;

 WHILE Y1>=40 DO

 begin

 X1:=120;

 WHILE X1<=440 DO

  Begin PutImage(X1,Y1,p^,CopyPut);   {строим башню}

  Delay(200); X1:=X1+80; end;

 Y1:=Y1-40

 end;

 WHILE X1<=440 DO  {строим верх башни}

Begin PutImage(X1,Y1,p^,CopyPut); {CopyPut=0 – режим копирования изображений}

 X1:=X1+160; end;

 SetColor(black);

 Line(200,120,280,120);   {строим окна в башне}

 Line(360,120,440,120);

 Readln;

 CloseGraph

End.

Контрольные вопросы:

  1.  Назначение графического режима. Расположение графических драйверов и их характеристики.
  2.  Какая процедура инициализирует графический режим? Формат представления и параметры.
  3.  Назовите процедуры и функции управления окнами и экраном.
  4.  Назовите процедуры и функции управления цветом и фоном.
  5.  Какие простейшие графические изображения представлены процедурами и функциями? Форматы представления.
  6.  Как осуществляется вывод текста в графическом режиме?


 

А также другие работы, которые могут Вас заинтересовать

12357. Изучение магнитного поля соленоида с помощью датчика Холла 198.5 KB
  Лабораторная работа № 20 Изучение магнитного поля соленоида с помощью датчика Холла 1. Цель работы: исследование магнитного поля на оси соленоида с использованием датчика Холла. 2. Методика измерений. Сначала получим выражение для расчета индукции магнитного пол
12358. Определение отношения заряда электрона к его массе методом магнетрона 245 KB
  Лабораторная работа № 19 Определение отношения заряда электрона к его массе методом магнетрона 1. Цель работы: измерение удельного заряда |e|/m электрона. 2. Методика измерений Существуют различные методы определения отношения |e|/m в основе которых лежат результа...
12359. Исследование распределения термоэлектронов по скоростям 146 KB
  Лабораторная работа № 18 Исследование распределения термоэлектронов по скоростям 1. Цель работы: экспериментальное исследование распределения Максвелла. 2. Обоснование метода исследования. В замкнутом сосуде наполненном газом при температуре Т устанавливается...
12360. Ремонт стартера 427 KB
  Стартер является основным прибором системы пуска двигателя и представляет собой четырехнолюсный электродвигатель для преобразования электрической энергии аккумуляторной батареи в механическую и передачи ее на маховик с целью прокрутки коленчатого вала двигателя.
12361. Определение характеристик постоянного магнита по измерениям с датчиком Холла 249.5 KB
  Лабораторная работа № 16 Определение характеристик постоянного магнита по измерениям с датчиком Холла 1. Цель работы: Определение характеристик постоянного магнита по измерениям с датчиком Холла. 2. Эффект Холла. Эффект Холла заключается в том что если пропустит...
12362. Исследование характеристик поперечного датчика Холла 266.5 KB
  Лабораторная работа № 15 Исследование характеристик поперечного датчика Холла 1. Цель работы: Исследование характеристик поперечного датчика Холла 2. Эффект Холла. Эффект Холла заключается в том что если пропустить через металлическую или полупроводниковую пла
12363. Исследование характеристик продольного датчика Холла 266.5 KB
  Лабораторная работа № 14 Исследование характеристик продольного датчика Холла. 1. Цель работы: Изучение эффекта Холла. 2. Эффект Холла. Эффект Холла заключается в том что если пропустить через металлическую или полупроводниковую пластину рис.14.1. электрический то
12364. Вихревое электрическое поле 3.2 MB
  3 Лабораторная работа № 13 Вихревое электрическое поле 1. Цель работы. Изучение вихревого электрического поля при изменении магнитного поля в соленоиде. 2. Электромагнитная индукция. Вихревое электрическое поле. Явление электромагнитной индукции...
12365. Изучение явления магнитного гистерезиса 4.23 MB
  17 PAGE 16 Лабораторная работа № 12 Изучение явления магнитного гистерезиса 1. Цель работы. Проведение измерений цикла перемагничивания ферромагнетика. 2. Электронный осциллограф. Прибор предназначен для исследования быстропеременных периодичес