Комсомольский-на-Амуре Государственный Технический
по дисциплине «Программирование»
Тема: ”Работа в графическом режиме BC++ ”
Выполнил: Кормин И.А.
Группа: 4ВС-1
Проверил: Петров Ю.А.
2005 год
16. РАБОТА В ГРАФИЧЕСКОМ РЕЖИМЕ ВС++
Цель работы:
· Научиться инициализировать графический режим ВС++;
· Научиться пользоваться базовыми функциями видеопамяти;
· Научиться использовать графические примитивы и вывод текстовых сообщений.
Задание:
В графическом режиме определить максимальные значения координат страницы. Создать графическое окно, установить текущую графическую позицию, нарисовать какой-либо объект. Использовать коэффициент «неквадратности» при изображении объекта. Изменить рисующий цвет и фон объекта. Переместить объект. Использовать перечислимый тип putimage_ops. Предметная область может быть любая. При выполнении задания воспользоваться материалами лекций 20 и 21.
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
//Функция, изменяющая цвет фона
void bkcolor(void)
{
static int a=0;
++a;
a%=16;
if (a==6) a++; //не допускает совпадения цвета фона с цветом круга
setbkcolor(a);
};
void main(void)
{
clrscr();
//Автоопределение драйвера видеокарты
int gdriver = DETECT, gmode, errorcode;
//Инициализация графических и локальных переменных
initgraph(&gdriver, &gmode, "e:\\borlandc\\bgi");
//Если драйвер неопределен
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Графическая ошибка: %s\n", grapherrormsg(errorcode));
printf("Нажмите любую клавишу для продолжения:");
getch();
exit(1);
}
int xasp,yasp,midx,midy; //Объявление переменных
int radius = 100; //Радиус окружности=100
float cor=6,i=2,j=2; //Переменные цвета круга, шаг по осям x и y
midx = getmaxx() / 2; //Определение центра экрана
midy = getmaxy() / 2;
getaspectratio(&xasp, &yasp);
setbkcolor(5); //Цвет фона
setcolor(cor); //Рисующий цвет
circle(midx, midy, radius); //Рисуем окружность в центре
setfillstyle(SOLID_FILL,cor); //Устанавливаем стиль и цвет заливки круга
floodfill(midx, midy,cor); //Заливаем окружность
//Создаем указатель в котором содержится битовый образ окружности
char *buf=new char[imagesize(midx-102,midy-102,midx+102,midy+102)];
//Помещаем этот образ в выделенный заранее участок памяти
getimage(midx-102,midy-102,midx+102,midy+102,buf);
while(!kbhit()) //Цикл реагирования на нажатие клавиши
{ //и перемещения окружности
midx+=i;
midy+=j;
//Изображаем битовый образ окружности на экране
putimage(midx-102,midy-102,buf,COPY_PUT);
setaspectratio(xasp,yasp);
//Если круг достиг левой или правой границы, он отскакивает
if(midx+i>=getmaxx()-102 || midx+i<=102)
{
i*=-1;
bkcolor(); //Функция изменения цвета фона
}
//То же самое, если он достигает верхней или нижней границы экрана
if(midy+j>=getmaxy()-102 || midy+j<=102)
{
j*=-1;
bkcolor(); //Функция изменения цвета фона
}
}
delete buf;
closegraph(); //Закрытие графического режима
}
2. Создаем проект и подключаем туда файл с кодом нашей программы и файл EGAVGA.OBJ, полученный с помощбю программы BGIOBJ.EXE.
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
void main(void)
{
clrscr();
int gdriver, gmode, errorcode;
//Инициализация графических и локальных переменных
registerfarbgidriver(EGAVGA_driver_far);
initgraph(&gdriver, &gmode,"");
//Если драйвер неопределен
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Графическая ошибка: %s\n", grapherrormsg(errorcode));
printf("Нажмите любую клавишу для продолжения:");
getch();
exit(1);
}
else printf("Инициализация прошла успешно!!!\n");
closegraph();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.