Разработка программы имитирующей работу обычных стрелочных часов

Автор: Пользователь скрыл имя, 27 Января 2012 в 09:00, курсовая работа

Краткое описание

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

Оглавление

ВВЕДЕНИЕ 3
1. Анализ технического задания 5
2. Выбор языка программирования 6
3. Конструирование классов 15
4. Описание программы 20
ЗАКЛЮЧЕНИЕ 24
Список литературы 25

Файлы: 1 файл

Разработка программы эмулятор игры « крестики-нолики.docx

— 86.57 Кб (Скачать)
 

Контурные фигуры

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

     Кроме формы одна фигура от другой может  отличаться цветом линии (контура), ее толщиной или типом. По умолчанию  в графическом режиме существуют следующие настройки: текущий цвет контура – WHITE (белый), толщина – один пиксель, тип – сплошная линия.

     Изменить  цвет рисования можно, обратившись  к функции setcolor() с прототипом

void setcolor(int color);

     Остальные параметры контуров устанавливаются  функцией

void setlinestyle (int linestyle, unsigned upattern, int thickness);

Здесь linestyle – тип линии, а thickness – ее толщина. Линия может быть пяти типов

Значение Название Описание
0 SOLID_LINE сплошная
1 DOTTED_LINE пунктирная
2 CENTER_LINE штрих-пунктирная
3 DASHED_LINE штриховая
4 USERBIT_LINE Тип, определяемый пользователем (параметр upattern)

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

Функция Описание
void line(int x1, int y1, int x2, int y2); чертит на экране прямую линию от точки с координатами (x1, y1) до точки с координатами (x2, y2).
void rectangle(int left, int top, int right, int bottom); чертит прямоугольник, расположенный на экране горизонтально (вертикально), координатой левого верхнего угла (left, top) и правого нижнего – (right, bottom)
void circle(int x, int y, int radius); окружность  с центром в точке (x, y) и радиусом radius (единица измерения – пиксель)
void arc(int x, int y, int stangle, int endangle, int radius); дуга с центром  в (x, y) и радиусом radius. Параметры stangle и endangle задают круговые координаты начальной и конечной точки. Угол измеряется в градусах и отсчитывается против часовой стрелки, где 0 градусов соответствует трем часам на циферблате. Если stangle равен 0, а endangle равен 360, функция arc() рисует полную окружность.
drawpoly (int numpoints, int *polypoints) многоугольник
void ellipse (int x, int y, int stangle, int endangle, int xradius, int yradius); эллипс

Плоскостные фигуры

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

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

     Данную  операцию можно выполнить при  помощи функции

void floodfill(int x, int y, int border);

     Здесь x и y – координаты точки, расположенной внутри или вне контура соответственно (для раскрашивания той или иной области), border – цвет линии, образующей контур. При этом цвет всего контура должен быть одинаковым. Раскраска осуществляется цветом color и по шаблону pattern, которые устанавливаются функцией

void setfillstyle (int pattern, int color);

     Для наиболее часто встречающихся на практике плоскостных фигур в  графической библиотеке так же существуют уже готовые функции.

Функция Описание
void bar (int left, int top, int right, int bottom); рисует закрашенный  прямоугольник. Прямоугольник закрашивается  текущим цветом и с использованием текущего шаблона заполнения. Верхний  левый и нижний правый углы прямоугольника заданы параметрами (left, top) и (right, bottom) соответственно.
void fillellipse(int x, int y, int rx, int ry); рисует эллипс с центром в точке (x, y), горизонтальной и вертикальной осями rx и ry соответственно, и закрашивает его текущим цветом, используя текущий шаблон.
void fillepoly (int numpoints, int *polipoints); рисует контур многоугольника, имеющий numpoints точек, а затем закрашивает его. Polipoints – указатель на последовательность из (numpoints*2) целых чисел. Каждая пара чисел (x, y) является координатами вершины многоугольника.
void pieslice(int x, int y, int stangle, int endangle, int radius); рисует и  закрашивает сектор круга с центром  в точке (x, y) и радиусом radius. Сектор рисуется от угла stangle до угла endangle. Угол измеряется в градусах и отсчитывается против часовой стрелки, где 0 градусов соответствует трем часам на циферблате.

Вывод текста в графическом  режиме

     Вывод текста в графическом режиме можно  осуществить с использованием функции  outtextxy().

void outtextxy (int x, int y, char *textstring);

выводит поверх существующего на экране изображения  строку текста textstring начиная с позиции (x, y) (координата левого верхнего угла первого символа строки). Сформировать строку textstring необходимо заранее. Для этого удобно использовать функцию sprintf().

     Текстовая информация отображается на экране с  учетом параметров: цвет, тип шрифта, размер шрифта и направление. Эти параметры настраиваются функциями

void setcolor(int color);

void settextstyle(int font, int direction, int charsize);

Здесь color – цвет текста, font – тип шрифта, direction – направление вывода текстовой информации (0 – горизонтальное, 1 – вертикальное) и charsize – множитель, который влияет на размер выводимых на экран символов.

     Размер  символов (по вертикали и горизонтали) определяется как произ- ведение  стандартного размера (8*8 пикселей) на параметр charsize, то есть, если значение charsize будет равно 3, то каждый символ, отображающийся на экране, будет вписан в квадрат 24*24 пикселя.

     Параметр  font, который задает стиль шрифта, подключает к программе файлы с расширением *.chr (нестандартные «шрифты»), поэтому необходимо сделать эти файлы доступными (проще всего скопировать их в текущую директорию). 

 

  1. Конструирование классов

Создаем абстрактный  класс «стрелка».

Имя класса ARROW.

В классе имеются  следующие атрибуты:

  • статические защищенные переменные х0 и y0 целого типа (координаты основания стрелки);
  • защищенная переменная color целого типа (цвет стрелки);
  • защищенная переменная sh типа double (угол в радианах для поворота стрелки)

Операции класса:

  • void draw(int) – функция рисования и стирания стрелки. Причем в данном классе она чисто виртуальная.
  • void setXY(int, int) – функция установки координат x0 и y0.
  • void set_color(int) – функция задания цвета стрелки
  • void rotate (int) – функция изменения угла поворота стрелки.

Функция setXY также является статической. 

class ARROW

{

protected:

      static int x0,y0;

      int color;

      double sh;

public:

      static void setXY(int,int);

      virtual void draw(int)=0;

      void rotate(int);

      void set_color(int);

};

void ARROW::setXY(int _x, int _y)

{

x0=_x;

y0=_y;

}

void ARROW::set_color(int _color)

{

color=_color;

}

void ARROW::rotate(int pos)

{

sh=-Pi/30*pos;

}

int ARROW::x0;

int ARROW::y0; 

Создаем класс для секундной стрелки:

Имя класса arrow_sec

Класс является наследником класса ARROW. Наследуемый доступ public.

В классе переопределяем лишь функцию draw.

class arrow_sec:public ARROW

{

 public:

      void draw(int);

};

void arrow_sec::draw(int m)

{

int cl;

if (m==1)

{

  setcolor(color);

  setfillstyle(1,color);

  cl=color;

}

else

{

  setcolor(0);

  setfillstyle(1,0);

  cl=0;

}

line(x0+4*cos(sh),y0-4*sin(sh),       x0+1+126*cos(1.5+sh),y0+1-126*sin(1.5+sh));

line(x0+1+126*cos(1.5+sh),y0+1-126*sin(1.5+sh), x0+157*cos(1.57295+sh),y0-157*sin(1.57295+sh));

line(x0+157*cos(1.57295+sh),y0-157*sin(1.57295+sh), x0+126*cos(1.64159+sh),y0-126*sin(1.64159+sh));

line(x0+126*cos(1.64159+sh),y0-126*sin(1.64159+sh), x0+4*cos(3.14159+sh),y0-4*sin(3.14159+sh));

line(x0+4*cos(3.14159+sh),y0-4*sin(3.14159+sh), x0+4*cos(0+sh),y0-4*sin(0+sh));

floodfill(x0+110*cos(1.57295+sh),y0-110*sin(1.57295+sh),cl);

setcolor(0);

line(x0+4*cos(0+sh),y0-4*sin(0+sh), x0+1+126*cos(1.5+sh),y0+1-126*sin(1.5+sh));

line(x0+1+126*cos(1.5+sh),y0+1-126*sin(1.5+sh), x0+157*cos(1.57295+sh),y0-157*sin(1.57295+sh));

line(x0+157*cos(1.57295+sh),y0-157*sin(1.57295+sh), x0+126*cos(1.64159+sh),y0-126*sin(1.64159+sh));

line(x0+126*cos(1.64159+sh),y0-126*sin(1.64159+sh), x0+4*cos(3.14159+sh),y0-4*sin(3.14159+sh));

line(x0+4*cos(3.14159+sh),y0-4*sin(3.14159+sh), x0+4*cos(sh),y0-4*sin(sh));

setcolor(cl);

fillellipse(x0,y0,8,8);

setcolor(0);

 circle(x0,y0,8);

} 

Создаем класс для минутной стрелки:

Имя класса arrow_min

Класс является наследником класса ARROW. Наследуемый доступ public.

В классе переопределяем лишь функцию draw. 

class arrow_min:public ARROW

{

    public:

      void draw(int);

};

void arrow_min::draw(int m)

{

int cl;

if (m==1)

{

  setcolor(color);

  setfillstyle(1,color);

  cl=color;

}

else

{

  setcolor(0);

  setfillstyle(1,0);

  cl=0;

}

line(x0+7.5*cos(sh),y0-7.5*sin(sh), x0+126.5*cos(1.45+sh),y0-126.5*sin(1.45+sh));

line(x0+126.5*cos(1.45+sh),y0-126.5*sin(1.45+sh), x0+157*cos(1.57+sh),y0-157*sin(1.57+sh));

line(x0+157*cos(1.57+sh),y0-157*sin(1.57+sh), x0+126.5*cos(1.69159+sh),y0-126.5*sin(1.69159+sh));

line(x0+126.5*cos(1.69159+sh),y0-126.5*sin(1.69159+sh),x0+7.5*cos(3.14159+sh),y0-7.5*sin(3.14159+sh));

line(x0+7.5*cos(3.14159+sh),y0-7.5*sin(3.14159+sh), x0+7.5*cos(sh),y0-7.5*sin(sh));

floodfill(x0+110*cos(1.57+sh),y0-110*sin(1.57+sh),cl);

setcolor(0);

line(x0+7.5*cos(sh),y0-7.5*sin(sh), x0+126.5*cos(1.45+sh),y0-126.5*sin(1.45+sh));

line(x0+126.5*cos(1.45+sh),y0-126.5*sin(1.45+sh), x0+157*cos(1.57+sh),y0-157*sin(1.57+sh));

line(x0+157*cos(1.57+sh),y0-157*sin(1.57+sh), x0+126.5*cos(1.69159+sh),y0-126.5*sin(1.69159+sh));

line(x0+126.5*cos(1.69159+sh),y0-126.5*sin(1.69159+sh),x0+7.5*cos(3.14159+sh),y0-7.5*sin(3.14159+sh));

line(x0+7.5*cos(3.14159+sh),y0-7.5*sin(3.14159+sh), x0+7.5*cos(sh),y0-7.5*sin(sh));

setcolor(cl);

fillellipse(x0,y0,15,15);

setcolor(0);

 circle(x0,y0,15);

} 

Создаем класс для часовой стрелки:

Информация о работе Разработка программы имитирующей работу обычных стрелочных часов