---
title: "Понг своими руками"
description: "Доброго времени суток! В прошлый раз мы нашли все необходимые формулы для реализации простой версии..."
author: "Raphael"
published: "2013-08-04T08:45:26+00:00"
modified: "2013-10-06T23:49:42+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/pong-svoimi-rukami-366987"
markdown_url: "https://yvision.kz/post/pong-svoimi-rukami-366987/markdown"
site_name: "Yvision.kz"
---

# Понг своими руками

> Доброго времени суток! В прошлый раз мы нашли все необходимые формулы для реализации простой версии...

Доброго времени суток! [В прошлый раз](http://yvision.kz/post/361897) мы нашли все необходимые формулы для реализации простой версии игры Понг. Сегодня мы ее реализуем на знакомом нам 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*

*

![Понг своими руками](http://storage.yvision.kz/images/user/raphael/6O4CZPLD46RXpLu5dagTuTTrG1L02W.png)

*

Свойства – это переменные, которые влияют на состояние класса. Например, радиус или диаметр мяча, его позиция, цвет.

Методы – это те же процедуры и функции, т.е. это то, что класс умеет делать (вычислять). Например, в нашем случае класс имеет функции расчета отражения мяча при соударении со стенкой или ракеткой. Эти функции и есть методы, которые принадлежат классу.

- double Ball::ContactX()

- {

- alpha=x1/9;
- if((x1320) 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(x2x1=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. На этом всё. В следующий раз мы добавим игру против компьютера , а пока можете [скачать](http://download.files.namba.net/files/51012282) исходники!

---

Source: [https://yvision.kz/post/pong-svoimi-rukami-366987](https://yvision.kz/post/pong-svoimi-rukami-366987)