Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб по С и С++ / Лаб_С_№16

.doc
Скачиваний:
65
Добавлен:
17.03.2015
Размер:
53.76 Кб
Скачать

/* ЛАБОРАТОРНАЯ РАБОТА 10 ГРАФИКА (GRAFIC)

Основные функцииinitgraph - инициализация графической системы closegraph - выход из графики

graphresult - контроль правильности выполнения графической функции (0 - верно)

grapherrormsg - описание ошибки при неверном выполнении функции

setviewport - установить графическое окно

getmaxx - максимальное значение по оси х

getmaxy - максимальное значение по оси y

getx - текущее значение х

gety - текущее значение y

moveto - установить курсор в позицию x, y

moverel - сместить текущую позицию курсора на вектор (x,y)

clearviewport - очистить текущее окно

cleardevice - очистка текущей страницы

getmaxcolor - максимальное значение цвета

setbkcolor - установить цвет фона

setcolor - установить значение рисующего цвета

getpixel - чтение пикселя

putpixel - запись пикселя

imagesize - определить размер памяти для сохранения фрагмента страницы

getimage - сохранить в памяти прямоугольный фрагмент страницы

putimage - восстановить на странице сохраненный фрагмент

line - вычертить линию между двумя точками

linerel - вычертить линию от текущей точки до другой, указанной как приращение относительно текущей

lineto - вычертить линию от текущей точки до другой, указанной явно

rectangle - вычертить прямоугольник по координатам верхнего и нижнего углов

drawpoly - ломанная линия, соединяющая последовательно ряд точек

circle - окружность по радиусу и координатам центра

arc - дуга окружности

ellipse - дуга эллипса

setlinestyle - установка вида линии

bar - заполненный прямоугольник

bar3d - заполненный параллелепипед

fillpoly - заполненный замкнутый многоугольник

fillellipse - заполненный эллипс

pieslice - заполненный круговой сектор

sector - заполненный эллиптический сектор

floodfill - заполнение области, замкнутый контур которой уже существует

setfillstyle - вид (шаблон и цвет) заполнения

settextstyle - инициализация знакогенератора

settextjustify - расположение выводимых строк

outtext - вывести текст относительно текущей опорной точки

outtextxy - вывести текст относительно опорной точки x,y.

ПРИМЕРЫ

Пример 1.

/* Графические примитивы, контурные фигуры.

Пока не нажата клавиша программа рисует случайные линии,

прямоугольники и окружности. */

#include <graphics.h>

#include <stdlib.h>

#include <conio.h>

int main(void)

{

int gdriver=DETECT,gmode,errorcode,wr,x,y;

/* инициализация графики, драйвер в тек.каталоге*/

initgraph(&gdriver,&gmode,"");

/* проверка правильности инициализации */

errorcode=graphresult();

if (errorcode !=grOk)

{

printf("ошибка:%s\n",grapherrormsg(errorcode));

printf("нажмите клавишу для возврата.");

getch();

exit(1);

}

/* максимальные значения x,y */

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

randomize();

while(!kbhit()) /* пока не нажата клавиша */

{

switch(random(3)) /* возможные значения 0,1,2 */

{

case 0: /* рисует линию */

line(random(x),random(y),random(x),random(y));

break;

case 1: /* рисует прямоугольник */

rectangle(random(x),random(y),random(x),random(y));

break;

case 2: /* рисует окружность */

circle(random(x),random(y),random(y/2));

break;

}

delay(100); /* временная задержка */

}

delay(800);

getch();

closegraph (); /* выход из графики */

return 0;

}

Пример 2.

/* Графические примитивы, площадные фигуры. На экране рисуется заполненный эллипс */

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

int main(void)

{

int gdriver = DETECT, gmode, errorcode;

int midx, midy;

int radius = 100;

/* инициализация графики */

initgraph(&gdriver, &gmode, "");

/* проверка правильности инициализации */

errorcode = graphresult();

if (errorcode != grOk) /* ошибка */

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

midx = getmaxx() / 2; /* поиск центра экрана */

midy = getmaxy() / 2;

setbkcolor(15); /* цвет фона */

setcolor(1); /* рисующий цвет */

/* нарисовать эллипс с установленным заполнением */

setfillstyle(1,4);

fillellipse(midx, midy, 100,50);

/* выход из графики */

getch();

closegraph();

return 0;

}

Пример 3.

/* вывод текста разными шрифтами разным размером */

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

/* названия шрифтов */

char *fname[] = { "DEFAULT font",

"TRIPLEX font",

"SMALL font",

"SANS SERIF font",

"GOTHIC font"

};

int main(void)

{

int gdriver = DETECT, gmode, errorcode;

int style, midx, midy;

int size = 1;

/* инициализация графики */

initgraph(&gdriver, &gmode, "");

/* проверка правильности инициализации */

errorcode = graphresult();

if (errorcode != grOk) /* ошибка */

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

midx = getmaxx() / 2; /* поиск центра экрана */

midy = getmaxy() / 2;

/* местоположение текста относительно опорной точки */

settextjustify(CENTER_TEXT, CENTER_TEXT);

/* перебор шрифтов */

for (style=DEFAULT_FONT; style<=GOTHIC_FONT; style++)

{

cleardevice(); /* очистка видеостраницы */

size++ ; /* увеличение размера текста */

/* выбор режима знакогенератора */

settextstyle(style, HORIZ_DIR, size);

/* вывод сообщения */

outtextxy(midx, midy, fname[style]);

getch();

}

/* выход из графики */

closegraph();

return 0;

}

Пример 4.

/* Движение объекта.

рисуется картинка скачущего мячика, высота подъема уменьшается и он останавливается. Выводится горизонтальная и вертикальная надписи. */

#include<graphics.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<dos.h>

void main(void)

{

int *arrow;

int x,y,RADIUS=30,maxy,step,size,maxx,r;

int graphdriver=DETECT,gmode,errorcode;

initgraph(&graphdriver,&gmode,"");

errorcode=graphresult();

if (errorcode != grOk)

{

printf("ОШИБКА ГРАФИКИ:%s\n",grapherrormsg(errorcode));

printf("нажмите клавишу\n");

getch();

exit(1);

}

maxy=getmaxy();

maxy=maxy/RADIUS*RADIUS;

maxx=getmaxx();

x=getmaxx()/2;

y=RADIUS;

r=80;

setcolor(RED);

setbkcolor(14);

circle(x,y,RADIUS); /* рисуем окружность */

setfillstyle(SOLID_FILL,RED); /* режим заполнения */

floodfill(x,y,RED); /* заполнение окружности */

/* определение размера сохраняемой области ( мячика ) */

size=imagesize(x-RADIUS,y-RADIUS,x+RADIUS,y+RADIUS);

arrow=malloc(size); /* выделение памяти */

/* сохраняем картинку мячика в памяти */

getimage(x-RADIUS,y-RADIUS,x+RADIUS,y+RADIUS,arrow);

step=RADIUS;

cleardevice(); /* очистка страницы */

line(0,maxy+1,maxx,maxy+1); /* рисуем пол */

settextstyle(TRIPLEX_FONT,0,4); /* установка шрифта */

outtext("прыгает мячик"); /* вывод текста */

settextstyle(TRIPLEX_FONT,1,4);

outtextxy(5,100,"по полу");

while(! kbhit()) /* мячик прыгает сколько хотим */

{ /* или по концу движения */

sound(20000); /* сопровождается звуком */

/* вывод мячика в нужную точку */

putimage (x-RADIUS,y,arrow,XOR_PUT);

delay(125); /* временная задержка */

/* второй раз примененная функция с XOR_PUT

стирает выведенный образ */

putimage (x-RADIUS,y,arrow,XOR_PUT);

if(y>=maxy-2*RADIUS)

step=-RADIUS;

if(y<=r&&step<0) /* снижение верхнего уровня */

{ /* движения (затухание скачков) */

r+=50;

step=RADIUS;

}

y+=step;

if (r>=maxy) /* мяч остановился */

break;

nosound();

}

/* вывод изображения мяча на полу */

putimage (x-RADIUS,y-RADIUS,arrow,XOR_PUT);

getch();

free(arrow);

closegraph();

}

/* ЗАДАНИЕ

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

Вариант 1

Нарисовать дом. При нажатии определенных клавиш зажигается (гасится) свет, струится (или нет) дым из трубы.

Вариант 2

Изобразить на экране змейку, которая бегает по экрану.

Вариант 3

Шарик катится по полу от стенки к стенке пока не нажата клавиша.

Вариант 4

Нарисовать на экране песочные часы с сыплющимся песком. Когда последняя песчинка упадет, вывести надпись: прошло ххх секунд. Перевернуть песочные часы. Процесс продолжается, пока не нажата клавиша. Предоставить пользователю возможность установить часы в нужное место экрана перед тем, как начнется отсчет времени.

Вариант 5

Космический объект на звездном небе движется влево, вправо, вверх, вниз, по диагоналям.

Вариант 6

Нарисовать три параллелепипеда, заполненные различным образом. По желанию пользователя движение любого из них.

Вариант 7

Нарисовать три шарика и изобразить их движение на ветру.

Вариант 8

Нарисовать автомобиль, движение влево, вправо.

Вариант 9

Нарисовать дорогу, автомобиль (условно). Управлять движением автомобиля по дороге с учетом изгибов дороги.

Вариант 10

Нарисовать человечка и изобразить движение (например, машет руками).

Соседние файлы в папке Лаб по С и С++