Мегаобучалка Главная | О нас | Обратная связь


Движение графических объектовв Турбо Паскаль



2016-01-05 1350 Обсуждений (0)
Движение графических объектовв Турбо Паскаль 0.00 из 5.00 0 оценок




СОДЕРЖАНИЕ

ВВЕДЕНИЕ. 4

ГЛАВА 1. ИСПОЛЬЗОВАНИЕ ГРАФИЧЕСКОГО РЕЖИМА В ТУРБО ПАСКАЛЕ. 5

1.1 Основные понятия компьютерной графики в Турбо Паскале. 5

1.2 Модуль Graph. 10

1.3 Типы драйверов. 12

1.4 Инициализация графики. 13

ГЛАВА 2. ПОСТРОЕНИЕ ИЗОБРАЖЕНИЯ НА ЭКРАНЕ. 15

2.1 Графические примитивы.. 15

2.2 Работа с текстом. 18

2.3 Движение графических объектовв Турбо Паскаль. 22

2.4 Разработка и реализация программ в среде Турбо Паскаль «Графика». 25

ЗАКЛЮЧЕНИЕ. 29

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ.. 30

ПРИЛОЖЕНИЕ 1. 31

 


ВВЕДЕНИЕ

 

В 1992 году фирма BorlandInternational выпустила два пакета программирования, основанные на использовании языка Паскаль [1,8],- BorlandPascal 7.0 и TurboPascal 7.0.Пакет BorlandPascal 7.0 учитывает многие новейшие достижения в программировании и практике создания программ и включает в себя три режима работы: в обычном режиме операционной системы MS DOS, в защищенном режиме MS DOS и в среде Windows.Обладая расширенными возможностями, пакет BorlandPascal7.0тем не менее требует для использования всех своих возможностей довольно большую память - примерно 30 Мбайт на жестком диске и не менее 2 Мбайт оперативной памяти. Да и стоимость этого пакета довольно высокая.Пакет TurboPascal 7.0 обладает ограниченными возможностями и позволяет работать только в обычном режиме MS DOS, но может быть использован практически на любой машине и стоит существенно дешевле.Начинающему программисту, по-видимому, целесообразно начать изучение языка и среды именно с этого пакета. Рассмотрению этого пакета ипосвящено данное пособие. TurboPascal включает в себя как язык программирования – одно из расширений языка Паскаль для ЭВМ типа IBM, так и среду, предназначенную для написания, отладки и запуска программ.Язык характеризуется расширенными возможностями по сравнению со стандартом, хорошо развитой библиотекой модулей, позволяющих использовать возможности операционной системы, создавать оверлейные структуры, организовывать ввод-вывод, формировать графические изображения и т. д.

ГЛАВА 1. ИСПОЛЬЗОВАНИЕ ГРАФИЧЕСКОГО РЕЖИМА В ТУРБО ПАСКАЛЕ.

Основные понятия компьютерной графики в Турбо Паскале.

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

В стандарте Паскаля графический вывод не предусмотрен. Однако на разных типах компьютеров, в разных реализациях Паскаля существуют различные программные средства графического вывода — специальные наборы данных, функций, процедур. Несмотря на такое разнообразие, имеются общие понятия и средства, свойственные любому варианту реализации графики в любом языке программирования. В данном разделе лекций мы затронем только такие базовые средства.Начиная с четвертой версии Турбо Паскаля для IBM PC появилась мощная графическая библиотека, организованная в модуль Graph. В приложении 2 в справочной форме дано описание основных компонент этого модуля. В рассмотренных ниже примерах программ используется модуль Graph. Для его подключения в начале программы необходимо написать строку:UsesGraph;

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

Графические режимы отличаются: размером графической сетки (M x N, где М — число точек по горизонтали, N — число точек по вертикали) цветностью (число воспроизводимых на экране цветов). Допустимые режимы зависят от типа монитора и соответствующего графического драйвера, используемого на компьютере.Для установки графического режима экрана существуют соответствующие процедуры. В модуле Graph процедура установки графического режима экрана имеет следующий заголовок:

Procedure InitGraph(VarDriver,Mode: Integer; Path: String);

Здесь целая переменная Driver определяет тип графического драйвера; целая переменная Mode задает режим работы графического драйвера; Path — выражение типа String, содержащее маршрут поиска файла графического драйвера.

Вот пример программы, инициализирующей графический режим VGAHi для работы с драйвером VGA (монитор типа VGA).UsesGraph;

VarDriver,Mode: Integer;

Begin

Driver: = VGA;{драйвер}

Mode: = VGAHi;(режимработы}

InitGraph(Driver,Mode,'C:\TP\BGI');

Здесь указывается, что файл egavga.bgi с драйвером для VGA-монитора находится в каталоге C:\TP\BGI. Режим VGAHi соответствует графической сетке 640 х 480 с палитрой из 16 цветов.

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

Driver:=Detect;

InitGraph(Driver,Mode,'C:\TP\BGI');

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

В модуле Graph процедура возвращения в текстовый режим имеет заголовок:

ProcedureCloseGraph;

Цвет фона и цвет рисунка. На цветном мониторе можно менять окраску экрана. Установленная окраска экрана называется цветом фона. Рисунок на этом фоне наносится с помощью разнообразных линий: прямых, окружностей, прямоугольников, ломаных и т.д. Цвета этих линий также могут меняться.

Заголовок процедуры установки цвета фона:

ProcedureSetBkColor(Color:Word);

Здесь Color — выражение целого типа, определяющее номер цвета фона.

Заголовок процедуры установки цвета линий:

ProcedureSetColor(Color:Word);

Заметим, что если в качестве номера цвета линии указывается 0, то это всегда совпадает с цветом фона (невидимая линия).Если необходимо очистить графический экран (стереть рисунок), то для этого используется процедура очистки экрана.

Графические координаты.

Положение каждого пикселя графи­ческой сетки однозначно определяется указанием его координат.

Графические оси координат рас­положены на экране так, как по­казано на

Рис.1 График координат

Горизонтальная ось X направ­лена слева направо, вертикаль­ная ось Y— сверху вниз. На ри­сунке указаны предельные гра­фические координаты, соответ­ствующие режиму VGAHi.

Можно определить макси­мальные координаты по осям, соответствующие данному драй­веру.

Это делается с помощью двух целочисленных функций:

Function GetMaxX;

Function GetMaxY;

Графическоеокно.

Область вывода изображения может быть ог­раничена любым прямоугольником в пределах экрана. Такая об­ласть называется графическим окном. Существует процедура, ус­танавливающая положение графического окна на экране.

Заголовок процедуры назначения графического окна:

Procedure SetViewPort(X1,Y1,X2,Y2: Integer; Clip: Boolean);

Здесь (X1,Y2)— координаты левого верхнего угла окна; (Х2, Y2) — координаты правого нижнего угла окна;

Clip— огра­ничитель фигур; если Clip=True, то все построения производят­ся только в пределах окна, в противном случае они могут выхо­дить за его пределы.После установки окна координаты точек внутри него отсчиты­ваются от верхнего левого угла.

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

Процедура назначения координат графического курсора:

Procedure MoveTo(X,Y: Integer);

Здесь X,Y— устанавливаемые координаты курсора. Координа­ты указываются относительно левого верхнего угла окна или, если окно не установлено, экрана. Процедура поставить точку — основная процедура получения изображения, поскольку любой рисунок складывается из точек. Состояние светящейся точки определяется координатами точки на экране и цветом точки.

Пример 1. Следующая программа устанавливает по центру эк­рана графическое окно размером 100х100, заливает его желтым фоном и заполняет синими точками, расположенными через 4 позиции.

Uses Graph;

VarDriver,Mode: Integer;

X,Y,X1,Y1,X2,Y2,Xc,Yc: Integer;

Begin

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

Driver:«Detect;

InitGraph (Driver, Mode, 'C: \TP\BGI") ;

{Определение координат центра экрана} Xc:=GetMaxXDiv 2;

Yc;«GetMaxYDiv 2;

{Определение координат графического окна}

Х1:=Хс-50;

Y1:=Yc-50;

X2:=Xc+50;

Y2:=Yc+50;

{Установка графического окна}

SetViewPort(X1,Y1,X2,Y2,True);

{Установка цвета фона и очистка экрана}

SetBkColor(Yellow);

ClearDevice;

{Расстановка точек в окне}

For Х:=1 То 25 Do

For Y:=lТо 25 Do

PutPixel(4*X,4*Y,Blue);

{Задержка изображения на экране до нажатия <ENTER>}ReadLn;

{Выход из графического режима в символьный}

CloseGraph;

End.

Модуль Graph

Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами IBM-совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.При исполнении графических программ требуется автономный драйвер графического адаптера (BGI-файл). Если программа использует штриховые шрифты, то кроме того нужен один или несколько шрифтовых файлов (CHR-файлы). При необходимости драйвер и шрифты могут быть включены в тело программы еще на этапе компиляции.

Графические драйверы поддерживают следующие графические адаптеры (и полностью совместимые с ними):

· CGA

· Hercules

· MCGA

· AT&T 400

· EGA

· 3270 PC

· VGA

· IBM-8514

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

· CGA.BGI

· Драйвер для CGA, MCGA

· EGAVGA.BGI

· Драйвер для EGA, VGA

· HERC . BGI

· Драйвер для монохромногоHercules

· ATT . BGI

· Драйвер для AT&T 6300 (400 строк)

· PC3270.BGI

· Драйвер для IBM 3270 PC

· IBM8514.BGI

· Драйвер для IBM 8514

 

Во время выполнения программы процедура InitGraph автоматически распознает графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает текстовый режим работы адаптера.Подпрограммы модуля Graph позволяют адресоваться к любому элементу (пикселю) растрового графического экрана и управлять светимостью этого элемента.

Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата X увеличивается слева направо, вертикальная координата У увеличивается сверху вниз. Например, в режиме 640x480 (адаптер VGA) правый нижний угол экрана имеет координаты 639, 479, а центр экрана -координаты 319,239.Некоторые графические подпрограммы используют понятие текущего указателя.

Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTo, LineRel, OutText и др. В этом смысле указатель подобен текстовому курсору, но, в отличие от него, не имеет видимого изображения на экране.Для вывода текстовых сообщений на графический экран модуль Graph предоставляет один матричный и 4 штриховых шрифтов. Каждый символ матричного шрифта на экране реализуется в виде матрицы из 8x8 пикселей. Штриховые шрифты для каждого символа определяют набор штрихов (векторов), с помощью которых на экране создается (вычерчивается) соответствующий символ. Штриховые шрифты позволяют изменять размеры текстовых надписей в широких пределах без существенного ухудшения качества изображения символов. Однако стандартные штриховые шрифты не содержат символы кириллицы.В модуле Graph имеется несколько процедур для рисования элементарных графических фигур - точек, линий, окружностей, дуг и т.п.

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

Типы драйверов

В представленной ниже таблице приведены типы графических адаптеров и названия совместимых с ними драйверов

Таблица 1

Типы драйверов

Драйвер Аппаратное обеспечение
CGA.BGI Адаптеры CGA, MCGA
EGAVGA.BGI Адаптеры EGA, VGA
HERC.BGI Монохромный адаптер Hercules
ATT.BGI AT&T 6300 (400 строк)
PC3270.BGI IBM 3270 PC
1BM8514.BGI IBM 8514

 

Драйверы представляют собой файлы с расширением .BGI, которые обеспечивают взаимодействие программ с графическими устройствами (согласно стандартам фирмы Borland, расширение -BGIдолжны иметь файлы графического интерфейса (BorlandGraphicInterface)). При инициализации определенного графичес­кого режима подключается соответствующий драйвер. Для обеспе­чения работы программы в одном из графических режимов проце­дура InitGraphопределяет тип адаптера и загружает соответствующий BGI-файл. Процедура CloseGraphслужит для удаления графичес­кого драйвера из памяти и восстановления текстового режима работы видеоадаптера.

При работе с графикой в Турбо Паскале есть возможность подключать не только стандартные, но и пользовательские драйве­ры. Последние должны удовлетворять стандарту BorlandInterna­tional. В модуле Graphимеется процедура RegisterBGIDriver, которая обеспечивает поддержку работы с драйверами пользователя.

Инициализация графики

· заголовочный файл graphics.h,

· библиотечный файл graphics.lib,

· драйверы графических устройств (*.bgi),

· шрифты (*.chr).

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

Прежде чем использовать графические функции, необходимо переключить видеоадаптер в графический режим (по умолчанию он находится в текстовом режиме). Для инициализации графики предназначена функция initgraph().Ее прототип -voidinitgraph (intdriver, intmode, charpath);

где intdriver – тип подключаемого драйвера, intmode – режим работы подключенного драйвера, charpath – местоположение драйвера.

Функция initgraph() считывает в память указанный драйвер, устанавливает видеорежим, соответствующий аргументу mode, и определяет маршрут к директории, в которой находится файл .bgi(драйвер). Если маршрут не указан, то предполагается, что этот файл расположен в текущей директории.

При использовании initgraph() можно указать или конкретный драйвер (например, egavga.bgi), или задать автоматическое определение (детектирование) типа видеоадаптера и выбора соответствующего драйвера уже во время выполнения программы (макрос DETECT). Это позволяет без изменения переносить программы на компьютеры с другими видеоадаптерами. Например,

· int D=DETECT,M;

· initgraph;

В приведенном примере подразумевается, что файл драйвера (например, egavga.bgi) расположен в текущей директории. Эта функция очищает экран монитора и переводит его в графический режим 640*480*16 (разрешение монитора 640*480, 16 цветов).

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

voidclosegraph (void);

Функция closegraph() освобождает память, используемую графическими функциями, и устанавливает текстовый режим, который был до вызова функции initgraph(), при этом происходит очистка экрана.

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

· Переход в графический режим;

· Работаем с графиком;

· Выход из графического режима.


ГЛАВА 2. ПОСТРОЕНИЕ ИЗОБРАЖЕНИЯ НА ЭКРАНЕ.

Графические примитивы

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

Рассмотрим несколько основных процедур рисования графи­ческих примитивов, имеющихся в модуле Graph.

Линия с заданными координатами концов (XI,Y1) и (Х2, Y2):

ProcedureLine(XI,Y1,Х2,Y2: Integer);

Линия от текущей точки до точки с координатами X, Y:

Procedure LineTo(X,Y: Integer);

Линий от текущей точки до точки с заданными приращениями координат DX, DY:

Procedure LineRel(DX,DY: Integer);

Прямоугольник с заданными координатами верхнего левого угла (XI,YI)и нижнего правого угла (Х2,Y2):

Procedure Rectangle(XI,Y1,X2,Y2: Integer);

Окружность с центром в точке (X, Y) и радиусом R— в пикселях:

Procedure Circle(X,Y: Integer; R: Word);

Дуга окружности с центром в точке (X, Y), радиусом R, началь­ным углом BegAи конечным углом EndA.Углы измеряются в градусах против часовой стрелки от направления оси X.

Procedure Arc(X,Y: Integer; BegA,EndA,R: Word);

Эллипсная дуга с центром в точке X,Yс начальным и конечным углами BegAи EndA, горизонтальным радиусом RXи вертикальным радиусом RY:

Procedure Ellipse (X,Y: Integer:; BegA, EndA, RX,RY: Word);

Пример. Составим программу, рисующую голову робота (рис. 32).

Рисунок содержит два прямоуголь­ника, две окружности, две дуги, эл­липс, три прямые линии и две крас­ные точки. Заранее определяются все координаты и размеры элементов ри­сунка.

UsesGraph;

VarDriver,Mode: Integer;

Begin

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

Driver:=Detect; i, InitGraph(Driver,Mode,'C:\TP\BGI || ;

Обведенный линией и закрашенный сектор окружности: ProcedurePieSlice(X,Y:Integer; BegA,EndA: Word);Наконец, можно закрасить любую область, ограниченную зам­кнутой линией. Для этого нужно указать какую-нибудь точку внутри этой области (X, Y)и цвет граничной линии {Border).Соответству­ющая процедура выглядит следующим образом: ProcedureFloodFill(X,Y: Integer; Border: Word);Модуль Graphпозволяет выводить на графический экран тек­сты. Мы не будем сейчас детально обсуждать эту проблему, необ­ходимую информацию можно найти в соответствующей литера­туре. Приведем лишь пример одной текстовой процедуры, с по­мощью которой выводится в графическое окно символьная строка (Txt), начиная с указанной позиции (X,Y).ProcedureOutTextXY(X, YInteger;Txt: String) ;Например, чтобы вывести под нашим рисунком строку «ЭТО РОБОТ», следует в программу добавить оператор OutTextXY(195;400,’ЭТО РОБОТ'); Как построить график функции. Одним из приложений компь­ютерной графики является наглядное представление результатов математических расчетов. Графики функций, диаграммы, линии уровней распределения пространственных зависимостей и т. п. де­лают результаты расчетов обозримее, нагляднее, понятнее. Мы рассмотрим лишь один простейший вариант математичес­кой графики — построение графика функции. Требуется составить программу построения на экране дисплея графика функцииу = т.

Решение этой задачи удобно проводить в следующем порядке:

1.Определить границы значений аргумента, в пределах кото­рых будет строиться график. Обозначим их следующим образом: Xmin— нижняя граница, — верхняя граница.

2.Для данной области значений аргумента определить предель­ные значения функции: YminиУmax. Эти значения необязательно должны быть точными. Они могут быть оценочными снизу и сверху соответственно.

3.Задать границы графического окна, в пределах которого бу­дет рисоваться график: [Xgmin, Xgmax], [ Ygmin, Ygmax] Поскольку в графических координатах вертикальная ось направлена вниз, тоYgmin>Ygmax.

Таким образом, мы имеем две системы координат: (X, У), ко­торую назовем системой математических координат (в литературе чаще используют термин «мировые координаты).

Здесь квадратные скобки означают округление до целого зна­чения (функцияRound).Построение графика функции может производиться либо то­чечным методом, либо кусочно-линейным. При первом способе график строится как последовательность точек, расположенных максимально близко. Производится «попиксельный» перебор зна­чений аргумента в интервале [Xgmin, Xgmax] с выставлением точек с соответствующими координатами Y. При кусочно-линейном методе задается шаг АХ и рассчитыва­ется последовательность значений (Х,Y).

Пример. Составим программу построения графика функции

Uses Graph;

VarDriver,Mode: Integer;

X: Real; Xg,Yg,I: Integer;

Begin

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

Driver:=Detect;

InitGraph(Driver,Mode;'C:\TP\BGI');

SetColor(White);{белыйцветлиний}

SetBkColor(Black);{черныйцветфона}

Line(10,90,200,90);(ось X}

Line(10,20,10,160);{осьY}

{Построение графика функции желтыми точками}

Х:=0;

For 1:=0 То 190 Do

Begin Xg:=10+Round(95/Pi*X);

Yg:=90—Round(50*Sin(X)) ;

PutPixel(Xg,Yg,Yellow);

X:=X+Pi/95

End;

{Разметка осей, запись функции}

OutTextXY(15,30,’Y');

OutTextXY(205,90,'X');

OutTextXY(130,40,'Y=SIN(X)');

ReadLn;{задержка}

CloseGraph; {выходизграфики}

End.

Работа с текстом

Вывод текста

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

OutText(Textstring:string)

Процедура OutText(Textstring :string) выводит строку текста, начиная с теку­щего положения СР.

Например: OutText('Bводите данные:');

Явный недостаток этой процедуры — нельзя указать произвольную точку на­чала вывода. Его можно устранить с помощью MoveTo, но лучше воспользоваться процедурой OutTextXY(X, Y-: integer; TextString: string), где X, Y — координаты точки начала вывода текста, TextString— константа или переменная типа string. Например, чтобы вывести сообщение "Для продолжения нажмите любую клави­шу", начиная с точки 60,100, надо записать:

OutTextXY(60,100,'Для продолжения нажмите любую клавишу...');

Вывод численных значений

В модуле GRAPHнет процедур, предназначенных для вывода численных дан­ных. Поэтому для вывода численных данных нужно сначала преобразовать число в строку с помощью процедуры Str, а затем посредством '+' подключить ее к выводи­мой OutTextXYстроке. Например:

Мах:=34.56;

Str(Мах: 6:2, Smax) ; {Результат преобразования находится в Smax}

OutTextXY(400,40, 'Максимум = ' + Smax); {+ — конкатенация}

Преобразование целочисленных и вещественных типов данных в строки удоб­но осуществлять специализированными пользовательскими функциями IntStи RealSt:

functionIntSt(Int: integer): string; {Преобразование целочис­ленного значения в строку. Int— целочисленноезначение} varBuf: s tring[10];

begin

Str(Int,Buf);

IntSt :=Buf

end;

functionRealSt(R: real; Dig,Dec:integer):string;

{Преобра­зование вещественного значения в строку.R— значение, Dig— ко­личество символов, Dec— количество символов после запятой}

varBuf: string[20];

begin

Str(R:Dig:Deo,Buf);

RealSt:=Buf

end;

Эти функции указываются как параметры в процедурах OutText, OutTextXYи снимают все проблемы вывода цифровых данных в графических режимах с любы­ми пояснениями. Например:

X:» 5,295643871;

OutText('X « ' + RealSt(X,11,9)) ;

В результате на экране появится: X = 5.295643871

Шрифты

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

По умолчанию после инициализации графического режима устанавливается растровый шрифт DefauWFont, который, как правило, является шрифтом, исполь­зуемым установленным драйвером клавиатуры. Каждый его символ формируется в матрице 8x8 бит. Шрифты размещены в отдельных файлах, имеющих расширение CHR. Активизация нужного шрифта осуществляется специальной процедурой. Высота и ширина символов каждого шрифта могут изменяться с помощью специ- - альных средств.

Таблица 2

Стандартные шрифты

Шрифт Файл Шрифт Файл
TriplexFont SmallFont TRIP.CHR LITT.CHR SansSerifFont GothicFont SANS.CHR GOTH.CHR

 

Шрифты SmallFont, SansSerifFont, GothicFontявляются векторными и не содер­жат русских символов, однако можно разработать собственные шрифты или менять отдельные символы в уже имеющихся. Разработка шрифтов — довольно сложный и трудоемкий процесс. Он может быть ускорен и упрощен, если воспользоваться специализированными пакетами TurboFont, BgiToolKit. С их помощью можно фор­мировать любое количество собственных СHR-файлов и загружать их по тому же принципу, что и стандартные.

Установка шрифта.

Качественное оформление экрана требует при выводе текста использования самых различных шрифтов. Список имеющихся в Турбо Пас­кале шрифтов приведен в табл. 2. Установить нужный шрифт можно процеду­рой

SetTextStyle(Font : word; Direction : word; CharSize: word)

где Font — выбранный шрифт, Direction — направление (горизонтальное или вер­тикальное),‘CharSize— размер выводимых символов.

Возможные значения двух первых параметров представлены в табл. 2. При организации вертикального вывода необходимо учитывать, что, если программист не установит точку начала вывода с помощью MoveTo, текст начинается с нижней строки экрана и продолжается вверх. Величину выводимых символов можно уста­навливать с помощью коэффициента CharSize. Если CharSize=l, то символ строит ся в матрице 8x8, если CharSize=2, то используется матрица 16x16 и т.д. до 10-крат-ного увеличения.

Шрифты

Таблица 3

Шрифты

Константа Значение Описание
DefaultFont 8x8битовый шрифт
TriplexFont Штриховые шрифты
SmallFont Малый шрифт
SansSerifFont Сансериф
GothicFont Готический
Константы ориентации
HorizDir Слева направо
VertDir Снизу вверх
       

В качестве примера шрифтом DefaultFontвыведем две строки: вертикальную и горизонтальную разной величины:

SetTextStyle(0,l,l);

{Буквы стандартной величины}

Outtextxy(200,200,'Вертикальная строка');

SetTextStyle(0,0,2);

{Размер букв увеличен)

Outtextxy(200,220,'Горизонтальная строка');

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

Движение графических объектовв Турбо Паскаль.

Создать видимость движения на экране можно двумя способами.

Первый способ заключается в том, что имитация движения объекта на экране создаётся за счёт многократного выполнения программой напора действий:нарисовать — пауза — стереть рисунок (нарисовать его в том же месте цветом фона)— изменить координаты изображения.

Перед началом составления программы надо продумать описание «движущегося» объекта; характер изменения координат, определяющих текущее положение объекта; диапазон изменения и шаг.

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

Рис.2 Окно программы Turbo Pascal

 

Рис.3 Выполнение программы

 

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

Для хранения фрагмента удобнее всего использовать динамическую область памяти. Получить размер памяти в байтах, необходимой для сохранения образа фрагмента, позволяет функция ImageSize(X1,Yl,X2,Y2:integer): word. Здесь (X1,YI) и (X2,Y2) — координаты верхнего левого и нижнего правого углов прямоугольника. Если полученный размер памяти больше 64Кб, то значение ImageSize = 0, aGraphResult=-1. Чтобы этого избежать, следует сохранять изображение по частям.

Полученный с помощью функции ImageSize размер памяти применяют в качестве входной информации для процедурыGetMem(p,Size), которая выделяет указанный объем памяти в динамической области. Здесь р — указатель на область памяти, Size — ее размер.

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

Процедура Putlmage(X,Y: integer; varBitMap, Mo-de:word); восстанавливает сохраненный в буфере Bit-Map прямоугольник, левый верхний угол которого задаётся координатами (X,Y). Параметр Mode задает режим вывода изображения.

Продемонстрируем имитацию движения с использованием выше описанных процедур при решении следующей задачи.

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

Рис.4 Окно программы TurboPascal

 

Рис.5 Выполнение программы

 



2016-01-05 1350 Обсуждений (0)
Движение графических объектовв Турбо Паскаль 0.00 из 5.00 0 оценок









Обсуждение в статье: Движение графических объектовв Турбо Паскаль

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1350)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.012 сек.)