Методические указания к курсовой работе по курсу: «Информатика»




Скачать 212.37 Kb.
Дата 25.08.2016
Размер 212.37 Kb.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

«МАТИ» - РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

ИМ. К.Э. ЦИОЛКОВСКОГО

Кафедра "Электроника и информатика"


Компьютерная графика
Методические указания к курсовой работе по курсу:

«Информатика»

Составитель: Спыну М.В.

МОСКВА 2006

Курсовоая работа по курсу:

«Информатика»

Компьютерная графика



Целью данной курсовой работы является приобретение студентом навыков разработки, написания, отладки и тестирования программной продукции на примере разработки компьютерной игры.
Техническое задание:
Каждый студент должен предложить программную реализацию одной из предлагаемых компьютерных игр. Игра должна содержать следующие обязательные разделы:


  1. Игровая заставка.

  2. Главное меню.

  3. О программе.

  4. Правила игры.

  5. Регистрация игрока.

  6. Рекорды.

  7. Программное ядро.

Требования предъявляемые к обязательным разделам:



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

  2. Главное меню должно содержать следующие обязательные пункты: о программе, правила игры, регистрация игрока, рекорды, начать игру.

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

  4. В правилах игры должна быть отражена суть игры, описаны правила и управляющие кнопки.

  5. Регистрация игрока осуществляется путем ввода пользователем данных о себе.

  6. Рекорды должны содержать четыре или больше учетные записи о лучших игроках (данные о победителях, рекордные показатели игры).

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



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


        1. Шахматы (2 игрока) 2.

        2. Морской бой 2.

        3. Ну погоди 2.

        4. Охотник 2.

        5. Подводный мир 2.

        6. Веселый повар 2.

        7. Тетрис 3.

        8. Танчики.2

        9. Pacman.3

        10. Гонки.2

        11. Космический мост 2.

        12. Звездные войны 2.

        13. Кабан 2.

        14. Ворона 2.



Общие сведения
Дисплей персонального компьютера (ПК) может работать в одном из двух режимов: текстовом или графическом. Рассмотрим, как производится работа в графическом режиме.

В современных ПК, в основном, используются растровые дисплеи, в которых наименьшим элементом изображения является маленькое светящееся пятно - pixel (от англ. picture element); из таких отдельных точек складывается изображение.



Разрешающая способность. дисплея - это количество пикселей по горизонтали и по вертикали (обычное разрешение - среднее - 320*200 точек). Изображение, выдаваемое на экран дисплея, в закодированном виде хранится в специальной области памяти центрального процессора - так называемой видеопамяти. Данные из этой области периодически считываются, преобразуются в видеосигналы и отображаются на экране. Преобразование кодов изображения в видеосигналы осуществляет специальная электронная схема - видеоадаптер. Наиболее распространенные типы адаптеров: EGA, VGA, SVGA. Более подробно о них можно прочитать, например, в следующих книгах:

Б.П.Прокофьев, Н.Н.Сухарев, Ю.Е.Храмов

"Графические средства Turbo C и Turbo C++";

А.Я.Савельев, Б.А.Сазонов, С.Э.Лукьянов

"ПК для всех" (в 4-х книгах, книга 1-ая).

Как кодируется изображение в видеопамяти? Каждому пикселю экрана ставится в соответствие фиксированное количество битов - атрибут пикселя. Обычно атрибут пикселя состоит из 1, 2, 4, 8 бит (в зависимости от используемого графического режима). Если атрибуту отводится 1 бит, то графика будет двухцветной, например черно-белой (конкретные цвета зависят от типа монитора). Если каждый пиксель представляется N битами, то имеется возможность представления оттенков. Обычно в цветных мониторах ПК IBM используется разделение цвета на RGB-компоненты (red-green-blue). Кроме того, имеется возможность увеличения яркости трех компонент, установив режим I - повышенной интенсивности. Таким образом, цвет кодируется четырьмя битами: IRGB, поэтому базовая палитра составляет =16 цветов.

В ТС и С++ имеется графическая библиотека, которая содержит большое число функций, позволяющих осуществить доступ к отдельным элементам видеопамяти, управлять цветом, создавать изображения различной формы, выводить графические текстовые сообщения, управлять курсором. Настройка этих функций на работу с конкретным видеоадаптером достигается за счет подключения нужного графического драйвера. Драйвер - это специальная программа для управления тем или иным устройством ПК.

Графические драйверы практически для всех видов адаптеров разработаны фирмой Borland International. Они находятся в отдельных файлах с расширениями BGI (Borland Graphics Interface). Для подключения графического драйвера служит специальная функция initgraph().

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

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

Например, для EGA в режиме 640*350 координаты угловых точек экрана и его центра будут такими:


(0,0)

(0,349)


·

(319,174)



(639,0)

(639,349)




Инициализация графической системы.
Обработка ошибок. Переключение режимов

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



detectgraph (&gd, &gm);

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

2). Загрузку драйвера, инициализацию графической системы выполняет функция

initgraph (&gd, &gm,"путь к BGI-файлам");

Значениями переменных gd и gm должны быть номер нужного драйвера и номер желаемого графического режима. Если файл с указанным драйвером найден, то ему динамически выделяется необходимая память и производится его загрузка.

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

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



initgraph (&gd, &gm, " ");

3). Обработка ошибочных ситуаций. В ТС и С++ предусмотрены средства обработки ошибок, возникающих при работе с графикой. Функция



graphresult ();

возвращает код завершения последней используемой графической функции. В случае успеха возвращается "0".

Для различных типов ошибок предусмотрены свои коды завершения:


Константа

Код ошибки

Сообщение

grOK

0

Нет ошибки

grNoInitGraph

-1

Графика не инициализирована

. . .

. . .

. . .

grNoLoadMem

-5

Нехватка памяти для загрузки драйвера

. . .

. . .

. . .

grFontNotFound

-8

Файл шрифта не найден

. . .

. . .

. . .

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



grapherrormsg (код ошибки);

Она возвращает указатель на строку, содержащую описание кода завершения, переданного в качестве аргумента.

Обычная начальная последовательность действий при работе с графикой выглядят таким образом:
#include

#include

#include

void main ( )

{

int gd, gm, error;



detectgraph (&gd, &gm);

initgraph (&gd, &gm, " ");

error = graphresult ( );

if (error !=gr0k )

{

puts (" ошибка графики");



puts (grapherrormsg (error));

exit (1);

}

// Тело программы



. . . . . . . . . . . .

closegraph ( );

exit (0);

}
4). Переключение режимов. Для временного перехода в текстовый режим дисплейного адаптера в графической библиотеке предусмотрена функция



restorecrtmode ();

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



setgraphmode (gm);

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



getgraphmode ();

и сохранен в программе.

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

getmaxmode ();

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



closegraph ();

5). Установка цветов, шрифтов, стилей линий и стилей закраски. Для указания цвета в программе можно пользоваться константами перечислимого типа или соответствующими им целыми значениями.

Стандартная цветовая палитра такова:

BLACK 0 черный

BLUE 1 синий

GREEN 2 зеленый

GRAY 3 серый

RED 4 красный

MAGENTA 5 малиновый

BROWN 6 коричневый

LIGHTGRАY 7 светло-серый

DARKGRАY 8 темно-серый

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

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

LIGHTCYAN 11 светло-бирюзовый

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

LIGHTMAGENTA 13 светло-малиновый

YELLOW 14 желтый

WHITE 15 белый

Цветом фона можно управлять с помощью функции



setbkcolor (цвет);

Текущее значение рисующего цвета (цвета выводимых символов и линий) устанавливается функцией



setcolor (цвет);

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



settextstyle (шрифт, направление, размер);

Допустимые значения для параметра шрифт:

0 DEFAULT_FONT (стандартный)

1 TRIPLEX_FONT (типа триплекс; в файле TRIP.CHR)

2 SMALL_FONT (уменьшенный; в файле LITT.CHR)

3 SANS_SERIF_FONT (прямой; в файле SANS.CHR)

4 GOTHIC_FONT (готический; в файле GOTH.CHR)
Допустимые значения для параметра направление:

0 HORIZ_DIR (слева направо)

1 VERT_DIR (снизу вверх)
Аргумент, управляющий размером шрифта, может изменяться от 1 до 10. Для стандартного шрифта эта величина говорит, во сколько раз надо увеличить каждый символ (этот шрифт определен на матрице 8*8, значит, если размер равен 4, то символы будут увеличены до матрицы 32*32 пиксела). Для остальных шрифтов этот параметр задает не линейную, а экспоненциальную шкалу масштабирования. Базовый вариант символа соответствует размеру, равному 4. Поэтому если размер равен 7, то символы увеличатся в 2 раза; если 8 - то в 3 раза; если 9 - то в 4 раза.

Использование вертикального расположения строки делает символы ниже и шире, чем в горизонтальной строке. Это связано с эффектом "неквадратности" пикселей на некоторых типах дисплеев.

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

setlinestyle (вид, образец, толщина);

Допустимые значения для параметра толщина:

1 NORM_WIDTH (линия в один пиксель)

3 THICK_WIDTH (линия в три пикселя)

Коды для параметра вид (только для кусочно-линейных графических примитивов):

0 SOLID_LINE (сплошная)

1 DOTTED_LINE (из точек)

2 CENTER_LINE (из точек и тире)

3 DASHED_LINE (пунктирная)

4 USERBIT_LINE (определяемая пользователем)

Параметр образец задается только, если вид равен 4 (в остальных случаях он игнорируется, поэтому его можно делать равным 0). С его помощью можно задать любой периодически повторяющийся рисунок линии с периодом до 16 пикселов. Если в линии нужен светящийся пиксел - в шаблоне задается бит, равный 1; если нет - 0.

Например, шаблон для пунктирной линии может быть таким: 0x3333, что соответствует последовательности битов 0011001100110011.

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

Для установки стиля закраски используется функция



setfillstyle (тип закраски, цвет);

Допустимые значения параметра тип закраски:

0 EMPTY_FILL (штриховка цветом фона)

1 SOLID_FILL (сплошное заполнение указанным цветом)

2 LINE_FILL (штриховка горизонтальными линиями)

3 LTSLASH_FILL (штриховка наклонными линиями ///// )

4 SLASH_FILL (штриховка утолщенными линиями ////// )

5 BKSLASH_FILL (штриховка утолщенными линиями \\\\\\ )

6 LTBKSLASH_FILL (штриховка наклонными линиями \\\\\ )

7 HATCH_FILL (прямоугольная горизонтальная штриховка)

8 XHATCH_FILL (косая штриховка)

9 INTERLEAVE_FILL (косая перекрывающаяся штриховка)

10 WIDE DOT_FILL (заполнение редко расположенными точками)

11 CLOSE_DOT_FILL (заполнение часто расположенными точками)



Работа с окнами и координатами

1). Очистка экрана производится с помощью функции



cleardevice ();

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

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

getmaxx ();

(возвращает максимальную координату по горизонтали),



getmaxy ();

(возвращает максимальную координату по вертикали).

3). Открытие окна на графическом экране. Внутри основного массива точек экрана всегда можно выделить некоторый подмассив - прямоугольное окно со своей системой координат. Делается это с помощью функции

setviewport (x1, y1, x2, y2, clip);

где x1, y1 - координаты левого верхнего угла окна;



x2, y2 - координаты правого нижнего угла окна;

clip - отсечка.

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

4). Очистку графического окна выполняет функция

clearviewport ();

5). Текущие координаты указателя позиции в системе координат окна можно получить с помощью функций



getx ();

(возвращает горизонтальную координату),



gety ();

(возвращает вертикальную координату).

6). Переустановку указателя позиции выполняют функции

moveto (x, y);

moverel (dx, dy);

где x, y - новые координаты в системе координат окна;

dx, dy - приращения относительно старых координат в окне.

7). Для восстановления параметров, принятых по умолчанию, служит функция



graphdefaults ();

Восстанавливаются окно, указатель позиции, цвет, стили линий, шрифты - такими, какими их делает initgraph().

8). Запись пиксела в видеопамять осуществляет функция

putpixel (x, y, цвет);

где x, y - координаты пиксела в системе координат окна.

Например, в результате выполнения фрагмента

for(i=0; i

{

putpixel (i, 10, GREEN);



putpixel (160+i, 10, RED);

}

будет выведена зелено-красная прямая.



9). Вывод текста в окно.

Стандартные функции вывода printf(), puts() успешно работают в графическом режиме. Однако, они ограничены видом и размером символов шрифта, а также возможностью размещения символов только в тех позициях экрана, которые допускаются в текстовом режиме. Специальные же графические функции вывода текста позволяют работать с ним, как с полноправным элементом графики. Стиль выводимого текста задается с помощью уже известной функции settextstyle(). Функций вывода графического текста в окно всего две:



outtext (sp);

выводится строка, начиная с текущей графической позиции; sp - это указатель на выводимую строку;



outtextxy (x, y, sp);

cтрока выводится, начиная с позиции (x, y).



ПРИМЕР:

#include

#include

#include

#include

void main()

{

int gd, gm, error, i;



detectgraph (&gd, &gm); // Переходим в графический режим

initgraph (&gd, &gm, "f:\\borlandc\\bgi");

error = graphresult ();

if(error != grOk)

{

puts (grapherrormsg (error));



exit (-1);

}

// Сплошная диагональ красного цвета толщиной в 3 пиксела на зеленом экране



setbkcolor (GREEN);

setcolor (RED);

setlinestyle (SOLID_LINE, 0, 3);

line (0, 0, getmaxx (), getmaxy ());

// После нажатия на клавишу очищаем экран

getch (); cleardevice ();

// Определяем окно вывода и очищаем его.

setviewport (100, 100, getmaxx()-50, getmaxy()-50, 1);

clearviewport ();

rectangle (100, 100, getmaxx()-50, getmaxy()-50);

settextstyle (TRIPLEX_FONT, HORIZ_DIR, 3);

setbkcolor (BLUE);

setcolor (WHITE);

// Выводим текст в левом верхнем углу окна

outtextxy (1, 1, "А вот и новое окно");

getch ();

closegraph ();

return (0);

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

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

1). Способ взаимодействия выводимых прямых линий устанавливает функция

setwritemode (режим);

Возможные коды параметра режим:

0 COPY_PUT

1 XOR_PUT

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

Если установлен режим 0, то вычерчиваемая линия "затирает" то, что было на экране. Если же задан режим 1, то для комбинирования линии с существующим на экране изображением, используется операция "исключающее ИЛИ" (XOR в ассемблере). Замечательное свойство этой операции в том, что вывод дважды на одно и тоже место линии приводит к ее стиранию и восстановлению исходного изображения на экране (это используется при программировании движущихся объектов).

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

2). Вычерчивание линии можно осуществить с помощью любой из трех функций:



1) line (x1, y1, x2, y2);

где x1, y1 - координаты начала отрезка прямой;

x2, y2 - координаты конца отрезка прямой.

При этом положение указателя текущей позиции не изменяется.



2) linerel (dx, dy);

где dx, dy - приращения координат текущей точки.

Линия рисуется из текущей точки в точку с новыми координатами. При этом указатель смещается из старой точки в новую точку.

3) lineto (x, y);

где x, y - новые координаты конца отрезка.

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

Линии рисуются текущим стилем, установленным функцией setlinestyle(), и текущим цветом, установленным функцией setcolor(). Используется система координат текущего окна и установленный режим отсечения.

П Р И М Е Р:

Два способа вычерчивания ромба.



1 способ:

setwritemode (XOR_PUT); setcolor (GREEN); moveto (100, 10);

lineto (50, 90); lineto (100, 170);

setcolor (RED); lineto (150, 90); lineto (100, 10);



2 способ:

setbcolor (WHITE); setcolor (GREEN);

line (100, 10, 50, 90); line (50, 90, 100, 170);

setbcolor (RED); line (100, 170, 150, 90); line (150, 90, 100, 10);

3). Контур прямоугольника можно начертить с помощью функции

rectangle (x1, y1, x2, y2);

где x1, y1 - координаты левого верхнего угла;

x2, y2 - координаты правого нижнего угла.

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



getaspectratio (&xasp, &yasp);

Отношение xasp/yasp и есть отношение горизонтального и вертикального размера пиксела. Поэтому, если горизонтальная строка квадрата имеет размер G пикселов, то длина вертикальной строки должна быть равна

(int) (G * (float) xasp/yasp);

4). Начертить ломаную линию позволяет функция



drawpoly (количество вершин, указатель на массив целых);

Каждая пара чисел массива интерпретируется как пара координат очередной вершины ломаной.

5). Для построения кривых используются функции:

Вычерчивание окружности



circle (x, y, радиус);

где x, y - координаты центра;



радиус - радиус окружности в пикселах по горизонтали.

"Степень неквадратности" пикселов автоматически учитывается.

Вычерчивание дуги окружности

arc (x, y, нач_угол, кон_угол, радиус);

Углы выражаются в градусах и отсчитываются против часовой стрелки. Нулевой угол соответствует горизонтальному направлению вектора слева направо. Значения углов преобразуются к эквивалентным значениям из интервала [0..360]. Таким образом, arc (x, y, -45, 45, r) и arc (x, y, 675, -315, r) задают одну и ту же дугу в четверть окружности.

Вычерчивание дуги эллипса

ellipse (x, y, нач_угол, кон_угол, rx, ry);

где rx, ry - длины полуосей эллипса в пикселах.

Оси эллипса всегда параллельны осям координат.

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

6). Закраску прямоугольника выполняет функция

bar (x1, y1, x2, y2);

где x1, y1 - координаты левого верхнего угла;

x2, y2 - координаты правого нижнего угла.

Стороны прямоугольника параллельны осям координат; контур его не вырисовывается. Стиль закраски устанавливается функцией setfillstyle().

7). Параллелепипед с закрашенной передней гранью можно нарисовать, используя функцию

bar3d (x1, y1, x2, y2, глубина, крыша);

Параллелепипед обрамляется внешним контуром. Если параметр глубина будет равен 0, то получится обрамленный прямоугольник. Если параметр крыша равен 1 (TOP_ON), то рисуется верхняя грань; если он равен 0 (TOP_OFF), то верхняя грань не прорисовывается (это полезно, если надо поставить друг на друга несколько параллелепипедов).

П Р И М Е Р:

Параллелепипеды, стоящие друг на друге

setbkcolor (WHITE);

setcolor (GREEN);

bar3d (230, 50, 250, 150, 15, 1);

bar3d (220, 150, 260, 180, 15, 1);

bar3d (300, 150, 340, 180, 15, 0);

bar3d (300, 50, 340, 150, 15, 1);
8). Построить и закрасить многоугольник позволяет функция

fillpoly (n, указатель на массив целых);

где n - количество вершин.

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

9). Закрашенный эллипс с контуром можно получить, применив функцию



fillellipse (x, y, rx, ry);

где x, y - координаты центра;

rx, ry - длины полуосей эллипса в пикселах.

Оси эллипса параллельны осям координат. Закрашивание производится текущим цветом.

10). Закрашенный круговой сектор с контуром рисует функция

pieslice (x, y, нач_угол, кон_угол, радиус);

После приведения углов к диапазону [0..360] сектор рисуется от меньшего значения угла к большему; поэтому невозможно изобразить сектор, пересекающий положительное направление оси ОХ. Контур (дуга и два радиуса) рисуется после закраски сектора, причем тип и толщина линий берутся из установок функции setlinestile(). Если нужен сектор без контура, это можно сделать так:

setcolor (BLACK); setbkcolor (BLUE) ;

setwritemode (XOR_PUT); setfillstile (WIDE_DOT_FILL, RED);

pieslice (200, 100, 45, 90, 50);

П Р И М Е Р:



Круговые сектора с надписями в них

setbkcolor (BLUE); setcolor (RED);

setfillstyle (1, 3);

x=getmaxx ()/2; y=getmaxy ()/2;

pieslice (x, y, 270, 360, 100);

setfillstyle (1, 2);

pieslice (x, y, 0, 270, 100);

settextstyle (1, 0, 2);

moveto (x-20, y-40); outtext ("75%");

moveto (x+20, y+20); outtext ("25%");

11). Закрашенный эллиптический сектор с контуром получим, применив функцию

sector (x, y, нач_угол, кон_угол, rx, ry);

Ее работа аналогична действию функции pieslice().

12). Закраска произвольной замкнутой области выполняется функцией

floodfill (x, y, граница);

где x, y - координаты точки внутри области.

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

П Р И М Е Р:



Семь концентрических красно-голубых колец

setlinestyle (0, 0, 1);

setbkcolor (GREEN);

for(i=7; i>=1; i--)

if (i%2)

{

setcolor (BLUE);



circle (x, y, 5*i);

setfillstyle (SOLID_FILL, BLUE);

floodfill (x, y, BLUE);

}

else



{

setcolor (RED);

circle (x, y, 5*i);

setfillstyle (SOLID_FILL, RED);

floodfill (x, y, RED);

}
П Р И М Е Р:



Движение прямоугольника слева направо

setlinestyle (0, 0, 1);

setwritemode (XOR_PUT); // для стирания линий

setbkcolor (BLUE);

setcolor (RED);

setfillstyle (1, RED);

rectangle (1, 90, 10, 110); // нарисовали закрашенный красный

bar (1, 90, 10, 110); // прямоугольник

getch (); // после нажатия любой клавиши он поедет вправо

for (i=11; i

{

line (i-10, 90, i-10, 110); // удаляем сторону слева



line (i, 90, i, 110); // пририсовываем линию справа

}

5. Включение .BGI-драйверов в .EXE-файл

Обычно .BGI-драйвер не является частью кода программы, а загружается как программный оверлей во время выполнения функции initgraph() (т.е. имеет место динамическая загрузка). И поэтому, чтобы программа с графикой могла работать, необходимо всегда "таскать за собой" вместе с .EXE-файлом еще и нужные .BGI-драйверы, причем, помещать их всегда в определенную директорию (которая указана при вызове initgraph()). Естественно, это не очень удобно, например, при переносе программы.

В TC++ предусмотрена возможность встраивания в .EXE-файл .BGI-драйвера, т.е., его статическое включение в программу на этапе компоновки. Для этого необходимо выполнить следующие три действия:

1) Превратить бинарный файл драйвера .BGI в обычный файл типа .OBJ. Это преобразование осуществляется с помощью утилиты BGIOBJ.exe (надо набрать в командной строке имя этой утилиты и рядом - имя нужного .BGI-файла; в результате будет порожден файл с именем, например, вместо EGAVGA.BGI - EGAVGA.OBJ).

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



int registerbgidriver(void (*driver)(void))

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

3) Cкомпоновать программу вместе с объектным файлом драйвера. Это можно сделать одним из следующих способов:

а) создать файл проекта, куда поместить имя исходного файла на С и .OBJ-файл, полученный из .BGI-файла;

б) перечислить эти файлы в командной строке компилятора TCC или компоновщика TLINK;

в) с помощью утилиты TLIB включить .OBJ-файл в графическую библиотеку GRAPHICS.LIB, откуда компоновщик возьмет его автоматически.



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


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница