Доброго времени суток! В прошлый раз мы нашли все необходимые формулы для реализации простой версии игры Понг. Сегодня мы ее реализуем на знакомом нам Turbo C++ под DOS (пора бы уже закончить с этим недоразумением и перейти на нормальную платформу).
Важным шагом в развитии технологий программирования было появление объектно-ориентированного программирования. Это позволило оперировать не просто процедурами и функциями, а целыми классами.
Класс – совокупность свойств, методов и событий. Объект – это экземпляр класса. С помощью класса описывается сущность, с которой нужно работать. У каждого класса обязательно присутствуют два метода: «создать объект» и «уничтожить объект». Во время создания объекта происходит выделение памяти для хранения необходимых свойств и заполняются значения по умолчанию. Во время уничтожения объекта происходит освобождение выделенной памяти. Метод для создания объекта называется конструктором, а для уничтожения – деструктором. Сам процесс создания объекта называется инициализацией. Создадим класс для игры Понг и назовем его Ball:
-
class Ball
-
{
-
public:
-
// объявляем конструктор и деструктор
-
Ball();
-
~Ball();
-
// объявляем методы
-
double ContactX();
-
double ContactY();
-
double Bat();
-
// объявляем события
-
double Move();
-
double Move2();
-
// объявляем свойства
-
double x1,x2,x11,x12;
-
double y1,y2,y11,y12;
-
double alpha,t0,vx,vy;
-
int x,y,a,b;
-
int go;
-
int pos;
-
int t,score;
-
};
Сохраним это в отдельный библиотечный файл и назовем его Ball.h
Свойства – это переменные, которые влияют на состояние класса. Например, радиус или диаметр мяча, его позиция, цвет.
Методы – это те же процедуры и функции, т.е. это то, что класс умеет делать (вычислять). Например, в нашем случае класс имеет функции расчета отражения мяча при соударении со стенкой или ракеткой. Эти функции и есть методы, которые принадлежат классу.
-
double Ball::ContactX()
-
{
-
alpha=x1/9;
-
if((x1<630)&&(pos!=1)&&(pos!=2)){
-
if(x1>320) alpha=alpha-320/9;
-
if(y1==470) y2=10;
-
if(y1==10) y2=470;
-
x2=(((y1+y2)+(x1/tan(alpha*3.14/180)))/(x1/tan(alpha*3.14/180)))*x1;
-
if(go==1) x2=x2-320;}
-
if(pos==1){
-
if(y1>240){
-
x2=640-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;
-
y2=470;}
-
else{ y2=10;
-
x2=320-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;}
-
pos=0;}
-
if(pos==2){
-
if(y1>240){
-
x2=640-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;
-
y2=470;}
-
else{ y2=10;
-
x2=320-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;}
-
pos=0;}
-
if(x2>=630){x2=629;ContactY();
-
pos=1;go=1;}
-
if(x2<=10){x2=11;ContactY();
-
pos=2;go=0;}
-
return x2;
-
}
-
double Ball::ContactY()
-
{
-
int B=x2/tan(alpha*3.14/180);
-
if(y1==10)
-
y2=B-(B/(630/x1));
-
if(y1==470) y2=470-(B-(B/(630/x1)));
-
if((y1!=10)&&(y1!=470))
-
y2=B-(B/(630/x1));
-
return y2;
-
}
События – это те же процедуры и функции, которые вызываются при наступлении определенного события, только эти процедуры могут как принадлежать классу, так и находиться вне его. Вы создаете процедуру в программе и говорите объекту, что в случае наступления некоторого события, нужно вызвать эту процедуру, и она будет вызываться. Например, если изменилась позиция мяча, то вызывается функция перемещения мяча в эту позицию. Программную реализацию этого события я описал в своей предыдущей статье.
Все эти свойства, методы и события опишем в отдельном файле и назовем его ball2.cpp
Теперь опишем файл, из которого будет вызываться сама игра:
-
// указатель класса
-
Ball* o1;
-
// создаём объект и получаем на него указатель
-
o1 =new Ball();
-
// заполняем свойства объекта
-
o1->x1=420;
-
o1->y1=10;
-
o1->go=1;
-
o1->pos=0;
-
o1->t=0;
-
int key;
-
do{
-
if(o1->t==0){o1->ContactX();
-
o1->Move();}
-
o1->Move2();
-
if(o1->t>=o1->t0){ o1->t=0;
-
o1->y1=o1->y2;o1->x1=o1->x2;}
-
if(kbhit()) key=getch();
-
}while(key!=27);
-
// разрушаем объект
-
delete o1;
-
o1=0;
-
closegraph();
-
return0;
-
}
Для заданного типа o1, тип Ball* является «указателем на o1». Это означает, что переменные типа Ball* содержат объектов типа T. На этом всё. В следующий раз мы добавим игру против компьютера , а пока можете скачать исходники!