• 8550
  • 4
  • 1
Нравится блог?
Подписывайтесь!

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

Доброго времени суток! В прошлый раз мы нашли все необходимые формулы  для реализации простой версии игры Понг. Сегодня мы ее реализуем на знакомом нам Turbo C++ под DOS (пора бы уже закончить с этим недоразумением и перейти на нормальную платформу).

Важным шагом в развитии  технологий программирования было появление объектно-ориентированного программирования. Это позволило оперировать не просто процедурами и функциями, а целыми классами.

Класс – совокупность свойств, методов и событий. Объект – это экземпляр класса. С помощью класса описывается сущность, с которой нужно работать. У каждого класса обязательно присутствуют два метода: «создать объект» и «уничтожить объект». Во время создания объекта происходит выделение памяти для хранения необходимых свойств и заполняются значения по умолчанию. Во время уничтожения объекта происходит освобождение выделенной памяти. Метод для создания объекта называется конструктором, а для уничтожения – деструктором. Сам процесс создания объекта называется инициализацией. Создадим класс для игры Понг и назовем его Ball:

 
  1. class Ball
  2. {
  3. public:
  4. // объявляем конструктор и деструктор
  5. Ball();
  6. ~Ball();
  7. // объявляем методы
  8. double ContactX();
  9. double ContactY();
  10. double Bat();
  11. // объявляем события
  12. double Move();
  13. double Move2();
  14. // объявляем свойства
  15. double x1,x2,x11,x12;
  16. double y1,y2,y11,y12;
  17. double alpha,t0,vx,vy;
  18. int x,y,a,b;
  19. int go;
  20. int pos;
  21. int t,score;
  22. };

Сохраним это в отдельный библиотечный файл и назовем его Ball.h


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

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

  1. double Ball::ContactX()
  2. {
  3. alpha=x1/9;
  4. if((x1<630)&&(pos!=1)&&(pos!=2)){
  5. if(x1>320) alpha=alpha-320/9;
  6. if(y1==470) y2=10;
  7. if(y1==10) y2=470;
  8. x2=(((y1+y2)+(x1/tan(alpha*3.14/180)))/(x1/tan(alpha*3.14/180)))*x1;
  9. if(go==1) x2=x2-320;}
  10. if(pos==1){
  11. if(y1>240){
  12. x2=640-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;
  13. y2=470;}
  14. else{ y2=10;
  15. x2=320-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;}
  16. pos=0;}
  17. if(pos==2){
  18. if(y1>240){
  19. x2=640-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;
  20. y2=470;}
  21. else{ y2=10;
  22. x2=320-(((y1/tan(alpha*3.14/180)))/(y1/tan(alpha*3.14/180)))*y1;}
  23. pos=0;}
  24. if(x2>=630){x2=629;ContactY();
  25. pos=1;go=1;}
  26. if(x2<=10){x2=11;ContactY();
  27. pos=2;go=0;}
  28. return x2;
  29. }
  30. double Ball::ContactY()
  31. {
  32. int B=x2/tan(alpha*3.14/180);
  33. if(y1==10)
  34. y2=B-(B/(630/x1));
  35. if(y1==470) y2=470-(B-(B/(630/x1)));
  36. if((y1!=10)&&(y1!=470))
  37. y2=B-(B/(630/x1));
  38. return y2;
  39. }

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

Все эти свойства, методы и события опишем в отдельном файле и назовем его ball2.cpp

Теперь опишем файл, из которого будет вызываться сама игра:

  1. // указатель класса
  2. Ball* o1;
  3. // создаём объект и получаем на него указатель
  4. o1 =new Ball();
  5. // заполняем свойства объекта
  6. o1->x1=420;
  7. o1->y1=10;
  8. o1->go=1;
  9. o1->pos=0;
  10. o1->t=0;
  11. int key;
  12. do{
  13. if(o1->t==0){o1->ContactX();
  14. o1->Move();}
  15. o1->Move2();
  16. if(o1->t>=o1->t0){ o1->t=0;
  17. o1->y1=o1->y2;o1->x1=o1->x2;}
  18. if(kbhit()) key=getch();
  19. }while(key!=27);
  20. // разрушаем объект
  21. delete o1;
  22. o1=0;
  23. closegraph();
  24. return0;
  25. }

Для заданного типа o1, тип Ball* является «указателем на o1». Это означает, что переменные типа Ball* содержат объектов типа T. На этом всё. В следующий раз мы добавим игру против компьютера , а пока можете скачать исходники!

4 августа 2013, 20:45
365

Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

«Мурашки по коже». Выступление Димаша Кудайбергенова впечатлило иностранцев

«Мурашки по коже». Выступление Димаша Кудайбергенова впечатлило иностранцев

21-го января сообщество "Казахстан разместило на своей странице фейсбук видео с выступлением Димаша Кудайбергенова c песней "S.O.S" на китайском конкурсе Singer 2017.  Данное видео стало вирусным...
Levlion999
15 февр. 2017 / 15:06
  • 22459
  • 4
Известные казахи, женившиеся на русских женщинах

Известные казахи, женившиеся на русских женщинах

Говорят, что за каждым великим мужчиной стоит женщина. А еще говорят что, все великие люди меняют судьбу своего народа. Так давайте узнаем больше о русских женщинах, навсегда изменивших жизнь...
Shala-Kazakh
17 февр. 2017 / 23:21
  • 9062
  • 57
Правильный пиар или Как нас достали новости о Баян Есентаевой

Правильный пиар или Как нас достали новости о Баян Есентаевой

Побитое личико Баян светилось со всех экранов, неважно – телевизионных или компьютерных. Казахстанское интернет-сообщество, забыв про терроризм и земельную реформу, обсасывало личную жизнь Есентаевой.
Timur_Tregulov
13 февр. 2017 / 16:20
  • 9053
  • 8
У нас зарплаты в 3 раза ниже, чем в Болгарии. А мы говорим о самом дешевом бензине, хлебе и воде

У нас зарплаты в 3 раза ниже, чем в Болгарии. А мы говорим о самом дешевом бензине, хлебе и воде

Многие у нас любят сравнивать цены в Казахстане с ценами в Европе. Как мол у нас все дешево! При этом они забывают о том, что минимальный размер оплаты труда на Западе в разы выше, чем у нас.
AliyaSadyrbaeva
15 февр. 2017 / 0:43
  • 6222
  • 52
Келин XX века vs келин XXI века. Если сейчас легче жить, то почему разводов стало больше?

Келин XX века vs келин XXI века. Если сейчас легче жить, то почему разводов стало больше?

Часто слышу от пожилых «апашек» слова разочарования, когда они в очередной раз узнают новость про развод семьи. В основном рассуждения начинаются с фразы «біздің кезімізде»...
socium_kzo
15 февр. 2017 / 15:47
  • 6002
  • 75
«Мужчины, живущие с родителями после 25 лет». Опрос набирает популярность в сети

«Мужчины, живущие с родителями после 25 лет». Опрос набирает популярность в сети

"Как вы относитесь к мужчинам, которые в 25+ еще живут с родителями?". Опрос, который набирает популярность в соцсетях. Хотелось бы узнать, что же думаете вы по этому поводу?
Muchacho55
15 февр. 2017 / 18:51
Места для уличного секса в Алматы. Не будьте ханжами, уятменами и моралфагами!

Места для уличного секса в Алматы. Не будьте ханжами, уятменами и моралфагами!

Не будьте ханжами, уятменами и моралфагами, будьте доброжелательней и скиньте уже с себя цепи и оковы нравственности. Да здравствует любовь и свобода!
gelberdeuet
14 февр. 2017 / 11:00
  • 4827
  • 98
Не всегда девушки виноваты, что у них нет парней, иногда парни сами не готовы к отношениям

Не всегда девушки виноваты, что у них нет парней, иногда парни сами не готовы к отношениям

Дневник одинокой астанчанки, которая пытается разобраться в себе и в своих отношениях. Мне всего 25, скоро начнутся постоянные разговоры родственников и друзей с извечным вопросом: "Когда замуж?".
woman_in_black
13 февр. 2017 / 10:30
«Казахстанцы больше не смогут приобрести недвижимость за рубежом»

«Казахстанцы больше не смогут приобрести недвижимость за рубежом»

Так мог бы звучать заголовок этой публикации, откажись Европа, Турция, ОАЭ, США и другие от фундаментального права человека на имущество. Пост про то, кто заработает на поправках в Конституцию РК...
lyalusha
16 февр. 2017 / 14:45
  • 3245
  • 23