Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Работа 14. Работа с экраном в графическом режиме




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

// Программа 14.1. Демонстрация построения окон, изображения шрифтов, орнаментов заполнения фигур и типов линий.

#include <graphics.h> // функции управления экраном в графическом

// режиме

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

void init_graph() // инициализация графического режима

{ int gr_driver, // графический драйвер

gr_mode, // графический режим

error_code; // код ошибки

gr_driver = DETECT; // автораспознавание драйвера

initgraph(&gr_driver, &gr_mode, "c:\\bc31\\bgi");

error_code = graphresult();

if (error_code!= grOk) //...,то произошла ошибка

printf("Ошибка инициализации графики: %s", grapherrormsg(error_code));

exit(1); // прерывание выполнения программы

} // конец init_graph()

void main()

{ int Pause = 500, // длительность просмотра кадра

X = 50, Y = 100, // координаты окна

XX = 550, YY = 450;

clrscr(); gotoxy(1,10);

printf("\n\t Нажимая любую клавишу, проследите последовательность");

printf("\n\t кадров формирования графического окна с рамкой");

getch(); // конец просмотра - нажать любую клавишу!

init_graph(); getch();

// Изобразим окно двойной рамкой с разными цветами

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

setfillstyle(SOLID_FILL,RED); // сплошная закраска красным цветом

bar(X-5,Y-5,XX+5,YY+5); // построение закрашенного

getch(); // прямоугольника

setfillstyle(SOLID_FILL,GREEN); // второй

bar(X,Y,XX,YY); // прямоугольник

getch();

setviewport(X+5,Y+5,XX-5,YY-5, 1); // установка графического окна

// с отсечением изображения на границах окна

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

setcolor(WHITE); getch(); // цвет контура фигур

clearviewport(); getch(); // очистка окна

// Используемые шрифты

int Font, // тип шрифта

CharSize, // коэффициент размера символов i;

for (Font=0; Font < 5; Font++) // изменяется текущий шрифт

for (i=1; i <= 5; i++) // увеличивается изображение букв

{ clearviewport();

CharSize = 2*i;

settextstyle(Font, HORIZ_DIR, CharSize); // задание типа,
// начертания шрифта и коэффициента размера символов

settextjustify(CENTER_TEXT, CENTER_TEXT); // задание

// способа выравнивания текста

outtextxy(250,175,"АаBbC"); // вывод с заданных координат

delay(Pause); // задержка кадра для просмотра

} getch();

// Заданные орнаменты

int Pattern; // орнамент заполнения фигур

for (Pattern=0; Pattern <= 11; Pattern++)

{ clearviewport();

setfillstyle(Pattern,WHITE); // установка типа орнамента и его цвета

circle((XX-X)/2,(YY-Y)/2,YY/3); // построение окружности

// с центром в точке ((XX-X)/2,(YY-Y)/2) и с радиусом YY/3

floodfill((XX-X)/2,(YY-Y)/2, WHITE); // закрасить область,
// содержащую точку ((XX-X)/2,(YY-Y)/2) и ограниченную белой линией

delay(Pause+200);

} getch();

// Типы линий

int LineType;

clearviewport();

setwritemode(COPY_PUT); // режим записи при вычерчивании линии

for (LineType=0, i=0; LineType < 5; LineType++)

{ setlinestyle(LineType,0,1); // задание параметров линии:

// стиль, шаблон, толщина (1 = NORM_WIDTH, 3 = THICK_WIDTH)

line(5,15+15*i,500,15+15*i); i++; // нормальная линия

setlinestyle(LineType,0,3);

line(5,15+15*i,500,15+15*i); i++; // жирная линия

delay(Pause);

} getch();

closegraph();

}

 

// Программа 14.2. Построение в оцифрованных осях семейства // кривых y = exp(-k*x)*sin(x), k = 0.1*j, j = 1,2,...,5

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

#include <math.h>

// !!! Здесь поместить функцию init_graph() из программы 1

main()

{ int i, j Pause = 500, // длительность просмотра кадра

X0, Y0, // начало координат

dy; // длина отрезка оцифровки оси Y

double x, y, // текущие значения аргумента и функции

DE=0.1;

clrscr(); gotoxy(1,10);

printf("\n\t Нажимая любую клавишу, проследите последовательность");

printf("\n\t кадров формирования изображений");

getch(); // конец просмотра - нажать любую клавишу!

init_graph();

X0 = 20; Y0 = getmaxy() / 2; // центр начала координат

setbkcolor(BLACK); setcolor(WHITE);

line(X0,20,X0,getmaxy()-20); // ось Y

line(X0,Y0,getmaxx()-20,Y0); // ось Х

settextjustify(RIGHT_TEXT,CENTER_TEXT); // оцифровкa оси Y

// cправа по центру от указанной ниже точки

settextstyle(DEFAULT_FONT,VERT_DIR,1); // фонт 8х8,

// вертикальное расположение текста, коэффициент размера 1

dy = (Y0-20) / 2; // длина отрезка оцифровки оси Y

// Оцифровка оси Y

for (i = 0; i < 5; i++)

{ moveto(X0-5,20+i*dy);

switch (i)

{ case 0: { outtext("1.0"); break; }

case 1: { outtext("0.5"); break; }

case 2: { outtext("0"); break; }

case 3: { outtext("-0.5"); break; }

case 4: { outtext("-1.0"); break; }

}

} getch();

// Построение графиков

for (j = 0; j <= 5; j++) // семейство кривых

{ moveto(X0,Y0);

for (i = 1; i < getmaxx()-40; i++) // построение кривой

{ x = i*4*M_PI/(getmaxx()-40);

y = exp(-DE*j*x)*sin(x);

lineto(X0+i, Y0-int(y*220));

} getch();

} getch();

closegraph();

}

// Программа 14.3. Построение изображения увеличивающегося

// четырехугольника: все стороны последовательно изменяются на

// увеличивающуюся величину increment.

// Просмотр изображения по нажатию клавиш:

// "Y" - предыдущие изображения сохраняются ("эффект глубины"),

// "N" - предыдущие изображения не сохраняются.

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

#include <math.h>

#include <ctype.h> // функция toupper() - возвращает заглавный

// эквивалент строчной буквы

// !!! Здесь поместить функцию init_graph() из программы 1

main()

{ int i, k, increment = 0, Pause = 100,

arr[10] = {310,230,330,230,330,250,310,250,310,230};

// в массиве координаты углов исходного четырёхугольника,

// координаты первой точки должны замыкать массив

char ch;

clrscr(); gotoxy(1,10);

printf("\t Для просмотра рисунка с сохранением всех изображений");

printf("\n\t нажмите клавишу Y, иначе - N");

ch = getch(); ch = toupper(ch);

init_graph();

setbkcolor(BLACK); setcolor(WHITE);

drawpoly(5,arr); // вывод исходного изображения

delay(2*Pause);

if (ch == 'N') // убрать изображение цветом фона

{ setcolor(BLACK); drawpoly(5, arr); }

for (i = 1; i < 25; i++) // построение изображений

{ increment++;

for (k = 1; k < 5; k++) // последовательное увеличение сторон

// четырехугольника

{ switch (k)

{ case 1: { arr[1] = arr[1] - increment;

arr[9] = arr[1]; break; } // вверх

case 2: { arr[2] = arr[2] + increment;

break;} // вправо

case 3: { arr[5] = arr[5] + increment;

break;} // вниз

case 4: { arr[6] = arr[6] - increment;

break;} // влево

}

setcolor(WHITE);

drawpoly(5, arr);

delay(Pause);

if (ch == 'N') // убрать предыдущее изображение

{ setcolor(BLACK); drawpoly(5, arr); }

}

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

closegraph();

}

 

// Программа 14.4. Изображение движущейся фигуры

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h> // прототипы функций для динамического

// распределения памяти malloc() и free()

#include <dos.h>

// !!! Здесь поместить функцию init_graph() из программы 1

main()

{ int i, size;

void *pnter; // указатель на область памяти с изображением круга

clrscr(); gotoxy(1,10);

printf("\n\t Выполнение программы необходимо сопровождать");

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

getch();

init_graph();

setbkcolor(BLACK);

setcolor(RED); // цвет для изображения контура круга

setfillstyle(1, RED); // заполнить круг красным цветом

circle(20, 200, 10); // рисует круг

floodfill(20, 200, RED); // закрашивает круг красным цветом

size = imagesize(10,190,30,210); // число байт, необходимых

// для сохранения прямоугольной области экрана с изображением круга

pnter = malloc(size); // выделение памяти size байт

getimage(10,190,30,210, pnter); // сохранение в буфере

// двоичного образа участка экрана с изображением круга

getch();

for (i = 1; i < 400; i++) // круг летит

{ putimage(10+(i-1), 190, pnter, XOR_PUT); // стирание

// предыдущего изображения круга

putimage(10+i, 190, pnter, XOR_PUT); // вывод изображения

delay(5);

} getch();

free(pnter); // освобождение памяти

closegraph();

}

Вопросы и упражнения

1. Как установить в программе графический режим?

2. Как можно удалить с экрана изображение линии или фигуры?

3. Составьте функцию, демонстрирующую мерцание звёзд на небе.

4. Как в программе выйти из графического режима и продолжить работу в текстовом режиме?

 


ПРИЛОЖЕНИЕ 2

Пример ОФОРМЛЕНИЯ ОТЧЁТА





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 573 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2257 - | 2182 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.