{ // создается три объекта, три невидимых точки
point A (150, 70);
point B; // координаты по умолчанию равны x=0 и y=0
point D (400, 200);
//инициализация графики
int dr = DETECT, // тип драйвера и адаптера - режим авто определения
mod; // режим работы адаптера
initgraph (&dr, &mod, "D:\\Borlandc\\BGI"); // -
// - перевод в графический режим
int errorcode=graphresult();
if(errorcode!=grOk){cout<<grapherrormsg(errorcode);
getch(); exit(0);}
// установка цвета
setcolor(7); // установка цвета для линий и символов
A.show (); // показать на экране точку А
getch (); // подождать до нажатия клавиши
B.show (); // показать на экране точку В
getch (); // подождать до нажатия клавиши
D.show (); // показать на экране точку D
getch (); // подождать до нажатия клавиши
A.move (); // переместитьточку А в начало координат
getch (); // подождать до нажатия клавиши
B.move(50, 60); // переместить точку B
getch (); // подождатьдо нажатия клавиши
*/
Рассмотрим класс “ пятно”
// определение класса spot находится в модуле spot.cpp
#ifndef SP
#define SP 1
#include “point.cpp”
class spot: public point { // класс spot производный от класса point
protected: //защищенные данные производного класса
|
|
int rad; // радиус пятна
int vis; // признак видимости пятна на экране
int tag; // признак сохранения образа пятна в памяти
char *pspot; //указатель на область ОП для изображения пятна
//(битового образа)
public:
spot(int xi, int yi, int ri):point(xi, yi) //конструктор производного класса с
//вызовом конструктора базового класса
{
int size; vis =0; tag =0; rad =ri;
size = imagesize (xi-ri, yi-ri, xi+ ri, yi+ ri);
// определяется объем памяти в байтах для
// для сохранения образа квадратного участка экрана, на котором будет
// изображено пятно
pspot=new char[size]; } //выделение памяти под битовый образ
~spot() //деструктор производного класса
{hide (); // удаление с экрана изображения пятна
tag =0;
delete []pspot;} // освободить память, выделенную под битовый образ
void show() //функция – изображения пятна на экране
{ if (tag ==0) // если в памяти нет битового образа пятна
//то его не может быть на экране
| //рисуем на экране и помещаем в память
{ circle(x, y, rad); // нарисовать окружность
floodfill (x, y, getcolor()); // заполнить произвольную замкнутую фигуру
// x, y -координаты точки внутри фигуры, последний
// параметр задает цвет границы
getimage(x-rad,y-rad,x+rad,y+rad, pspot);
// помещает в память копию прямоугольного фрагмента
// изображения – битовый образ
tag=1; // признак наличия образа в памяти
}
else // если пятно есть в памяти
if (vis ==0) //но его нет на экране
putimage(x-rad, y-rad, pspot, XOR_PUT);
// выводит в заданную область экрана копию изображения, размещенного в
// памяти последний параметр определяет способ копирования – если //изображение вывести на экран в то место, где уже есть тоже изображение, то //оно исчезнет
vis=1; // признак видимости пятна на экране для обоих случаев
|
|
}
void hide () // функция убирающая изображение пятна с экрана
{ if (vis ==0) //если изображения нет на экране
return;
putimage(x-rad, y-rad, pspot, XOR_PUT); // замазать изображение
vis=0;
}
void move (int xn, int yn) //функция перемещения пятна на экране
{ hide(); // убрать пятно в т. x,y
x=xn; y=yn; // координатам задать новое значение
show(); } // изобразить пятно в новой точке экрана
void vary (float dr) // функция изменяющая размеры пятна
{ float a;
int size;
hide(); // убрать изображение пятна с экрана
tag=0; // признак освобождения памяти
delete pspot; // освободить память, где находится битовый образ
a=dr*rad; // вычислить новый радиус
if(a<=0) rad =0;
else rad=(int)a;
size=imagesize(x-rad,y-rad,x+rad,y+rad);
//определить размер в байтах под битовый образ
pspot=new char[size]; //выделить память
show(); // изобразить пятно на экране
}
int& GetR() {return rad;} // функция возвращает радиус пятна
};