1.Анализ технического задания
Данная задача была реализована в графическом интерфейсе, так как определенного процесса предполагает его наглядную интерпретацию, что невозможно реализовать в текстовом режиме. Для работы с графикой в С++ определена библиотека graphics.h, при помощи которой можно рисовать различные элементы невысокой сложности. Данная программа написана с использованием объектного подхода, т. е. все сущности определены в виде объектов. В соответствии с поставленными условиями задания необходимо решить ряд задач:
Отрисовка игровой области
Отрисовка фигур
Падение фигур
Поврот фигур
Игровая область представляет собой прямоугольник размером 160х400 пискселей. В игровую область сверху будут опускаться фигуры разных типов. По мере выполнения программы игровая область будет наполняться фигурами.
Прямоугольники в библиотеке graphics.h реализуются при помощи функций bar().
Фигуры представляют собой различные прямоугольники.
-квадрат. Фигура квадрат представляет собой прямоугольник размером 40х40 пикселей. Данная фигура рисуется функцией bar(), которой необходимо передать координаты левого верхнего и правого нижнего узлов.
-линия. Фигура квадрат представляет собой прямоугольник размером
80х10 пикселей. Рисование данной фигуры идентично рисованию
квадрата.
Z.Данная фигура представляет собой 2 прямоугольника с
С размерами 40х20 пикселей.
Прямоугольники в библиотеке graphics.h реализуются при помощи функций bar(). Сущность фигура будет иметь способности появления, передвижения вниз, направо, налево и поворота. Фигуры двигаются до тех пор пока они н достигнут конца игровой области или не столкнуться с препятствием(другая фигура).
Падение фигур реализуется следующим образом:
1-фигура заливается цветом фона;
2-координата у увеличивается(происходит передвижение фигуры вниз);
3- фигура рисуется своим цветом.
Фигура перемещается направо или налево если нажата клавиша “d” и“a” соответственно. При нажатии клавиши “d” фигура заливается цветом фона, затем увеличивается координата Х(перемещение вправо) и фигура заливается своим цветом. Перемещение фигуры влево подобно перемещению вправо, за исключением изменения координаты Х(уменьшается).
Для поворота фигуры необходимо залить фигуру цветом фона, рассчитать изменения координат Х и У и залить его снова своим цветом
Необходимо предусмотреть также, чтобы при повороте фигуры не выходили за игровую область.
Инициализация и изменения координат будет производиться в отдельном классе и для рисования каждой фигуры будет использоваться отдельный класс.
2. Конструирование классов
На основе анализа технического задания было выявлено, что точкой привязкой будет класс Tetris, который — инициализирует начальные значения координат фигур и описывает методы изменения координат фигур ;
В программе также будут использованы следующие классы
1. класс Kvadrat— описывает свойства и методы, соответствующие объекту фигура-квадрат;
2. класс Liniya - описывает свойства и методы, соответствующие объекту фигура-линия;
3. класс KV - описывает свойства и методы, соответствующие объекту фигура-z;
4. класс Vedro - описывает свойства и методы, соответствующие объекту игровая область;
Класс - это основной элемент инкапсуляции в языке C++. Класс определяется с помощью ключевого слова class. Ниже показан общий формат объявления класса в языке С++:
class имя класса [:<список наследования>] {
[private:]
//Закрытые члены
protected:
//Члены, которые могут быть унаследованы
public:
//Открытые члены
} [<список_объектов>];
Здесь имя класса — это имя нового типа. После компиляции объявление класса <имя класса> становиться именем нового типа данных, который можно использовать для объявления объектов класса. Список объектов — это список объектов типа <имя класса>, разделяемых запятыми. Такой список необязателен. Список наследования указывает наследуемые классы. Если в таковых нет необходимости, он опускается.
Конструктор- функция которая создает объекты и которая может инициировать объекты начальными значениями. Конструктор имеет имя как у названия клааса.
В качестве примера приведем класс Tetris
class Tetris
{
public: //открытый доступ к членам класса
int x,y,x2,y2;
Tetris() //конструктор инициализирующий праметры х,у,х2 и у2 нач.значе-
{ x=180;y=0;x2=200;y2=20; } ниями
void setx(int i)
{ x+=i; }
void sety(int i)
{ y+=i; }
void setx2(int i)
{ x2+=i; }
void sety2(int i)
{ y2+=i; }
};
В состав класса Tetris включены следующие члены данные:
1. координаты позиций объектов – x,y , x2,y2.
X и x2 определяют верхнюю левую координату по оси абсцисс;
У и y2 определяют нижнюю левую координату по оси ординат;
2. конструктор. Конструктор Tetris() служит для инициализации начальными значениями элементов члена класса, то есть x,х2,y,у2
3. Включены в состав класса также свойства получения и установления значений элементов члена класса (x,y ,х2,у2) чтобы продемонстрировать возможности инкапсуляции :
setх(int), setу(int), setх2(int), setу2(int),
В состав класса Kvadrat включена функция член класса:
1.функция рисовая, стирания и опускания фигуры квадрат void risov().
В состав класса Liniya включена функция void risov() обеспечивающая рисование, стирание, опускания и передвижения фигуры – линия.
В состав класса Kv включена функция void risov() – обеспечивающая рисование, стирание, опускания и передвижения фигуры – Z.
В состав класса risovvedro включены следующие функции члены класса:
1.void risov() – обеспечивающая рисование игровой области и выбор фигуры(случайным образом).
2.void sozdanie()- обеспечивающая резервирование памяти для фигур и вызов функции рисования выбранной фигуры.
При вызове этой функции происходит динамическое резервирования памяти для фигуры и вызов класса через его объект.
Наследование позволяет строить иерархии классов в которых производный класс получает все элементы своего базового класса или нескольких базовых классов. Формат объявления класса при наследовании следующий:
Class <имя потомка>:[<спецификатор доступа>]<имя родителя> {…};
В данной программе классы Tetris,Liniya и Kv являются наследниками класса Tetris.
Для визуализации механизма наследования используем язык UML.
UML- язык графического описания для объектного моделирования в области разработки ПО. Ниже приведена диаграмма UML для данной программы.
Рис.1. UML диаграмма классов.
