
3.Описание программы
Реализация поставленной задачи в данной работе осуществляется с использованием языка программирования С++.
Подключаемые заголовочные файлы:
graphics.h – данная библиотека предназначена для взаимодействия с графической подсистемой, предоставляет доступ к графическому режиму и возможности рисования графических примитивов на экране. В частности, для реализации программы используются функции из состава данной библиотеки, перечисленные ниже:
initgraph() -считывает в память драйвер, устанавливает видеорежим, соответствующий аргументу mode, и определяет путь к директории, в которой находиться соответствующий драйвер *.BGI. Если путь не указан, то предполагается, что этот файл расположен в текущей директории.
graphresult - возвращает код ошибки выполнения последней графической операции.
closegraph - выход из графического режима. Освобождает всю память, выделенную под графическую систему, затем восстанавливает экран в режим, который был до вызова initgraph.
bar()-рисует двухмерный прямоугольник.
line() — рисует линию между двумя указанными точками lineto() — рисует линию от текущей позиции circle() — рисует окружность заданного радиуса ellipse() — эллиптическая дуга rectangle() — рисует прямоугольник getx() — возвращает координату x текущей графической позиции gety() — возвращает координату y текущей графической позиции moveto() — изменение значения текущего положения пера (CR)
fillpoly() — рисует и закрашивает многоугольник fillellipse() — рисует и закрашивает эллипс setcolor() — установка цвета
iostream.h – для реализации стандартного потока ввода-вывода. Из этой библиотеки используется функция cout для вывода на экран строки.
stdlib.h используется функция void exit() - вызывает немедленное окончание работы программы, а также функции генерации случайных чисел: void randomize() – включить генератор случайных чисел, int random(int) – возвращает случайное число.
conio.h - (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си
Описание глобальных переменных
int pov-переменная определяющая в каком состоянии находится фигура(0-исходное состояние, 1-состояние при поворотена 90 градусов)
int retur- переменная определяющая возможность поворота фигуры(0-поворот фигуры запрещен. 1- поворот фигуры разрешен).
Описание класса Kvadrat
class Tetris
{ public:
int x,y,x2,y2;
Tetris()
{ x=180;y=80;x2=200;y2=100; }
void setx(int i)
{ x+=i; }
void sety(int i)
{ y+=i; }
void setx2(int i)
{ x2+=i; }
void sety2(int i) { y2+=i; } };
Данный класс инициализирует начальные значения координат фигур.
Функции setx(int i), setx2(int i), sety(int i), sety2(int i) принимают целые значения увеличивают значения координат на принятое число.
Описание класса Kvadrat
Данный класс содержит функцию void risov(). Описание этой функции и ее фрагмент приведен ниже:
void risov()
{
setfillstyle(1,5); //
bar(x-20,y-10,x+20,y+10); //отрисовка квадрата вверху игровой области
ll:if(y<380) //условие достижения конца игровой области.
{ setfillstyle(1,7);
bar(x-20,y-20,x+20,y+20);
sety(10);
setfillstyle(1,5);
bar(x-20,y-20,x+20,y+20); //если недостигнут конец игровой области квадрат заливается цветом фона, перемещается вниз и отрисовывается снова
switch(getch()) //ожидания нажатия клавиши
{ case 'd':{} //если нажата клавиша d: квадрат передвигается вправо
case 'a':{} //если нажата клавиша a: квадрат передвигается влево
case 'k':{} //если нажата клавиша k: выход из программы
}
}}
В классах Liniya и Kv отрисовка фигур и их передвижение реализовано как в классе Kvadrat, но в них есть дополнительные условия:
1. prov; if(pov==0) goto ll; //при pov равном нулю фигура отрисовывается в исходном состоянии
else goto lll; //иначе отрисовывается фигура перевернутая на 90 градусов.
2. case 'm':
{ if(x>=180)
{ if(x+40<260) retur=1;
else retur=0;
}
else { if(x-40>90) retur=1;
else retur=0;
}
if(retur==1)
{ setfillstyle(1,7);
bar(x-10,y-40,x+10,y+40) ;
pov=1;
goto prov;
}
else goto ll;
}
При нажатии клавиши m :проверяется возможность поворота фигуры. Если поворот разрешен в переменную retur записывается 1 и фигура поворачивается на 90градусов, иначе записывается 0 и фигура не поворачивается.
Описание класса Vedro
Данный класс содержит 2 функции void sozdanie() и void rissovvedro().
void risovvedro()
{ setfillstyle(1,7);
bar(100,0,260,400); //отрисовывается игровая область
int ch;
l:ch=random(3)+1; // выбирается какая фигура будет выбрана для отрисовки
void sozdanie(int i)
{ switch(i)
{ case 1:{Kvadrat *p1=new Kvadrat; p1->risov();break;}
case 2:{Liniya *p2=new Liniya; p2->risov();break;}
case 3:{Kv *p3=new Kv; p3->risov();break;}
}
В этой функции происходит выделение памяти для фигуры и вызов функции рисующую выбранную фигуру.
В главной функции main() происходит подключение и отключение графического режима работы, и вызов функции рисования игровой области , с которого начинается игра