Проект Порталус


 

CompDocs on-line

Интернет-магазин постеров с доставкой

 
CompDocs
Вебмастеру
Программисту
Пользователю
Геймеру
Мабила
Новости
Отдохни
Беседка
Обои
Партнеры
Docs.com.ru

Web-мастеру:

PHP
ASP .NET
Perl
JavaScript
CSS
HTML
Раскрутка
Сервисы

Программисту:

DirectX
OpenGL
Pascal
Алгоритмы

Пользователю:

Windows
Linux
BIOS
Обои

Посетителю:

Форум
Юмор
Рассылки
Объявления
ФизМат
Тесты
Работа

Обои на рабочий стол
 

Автор: Алексей (Virus) Сало
Источник: mycomp.com.ua

Домашняя кухня: игры

(Продолжение)

Сегодня у вас на компьютере появится новая игра, которую вы сами и сделаете. В прошлый раз мы нарисовали линию (был простой статический рисунок). Но в любой игре должна быть анимация. Для анимации нам нужно использовать двойную буферизацию (о том, что это такое, писалось раньше). Вы, конечно, можете попробовать написать игру и с одиночным буфером (очень даже красиво получается :-)).

В этой статье мы научимся рисовать сферы (это будет наш мячик), четырехугольники (ракетки), обрабатывать клавиатуру (нам же нужно как-то управлять ракетками), ну и еще некоторые мелочи. Но обо всем по порядку. Итак, начнем с сфер. Для рисования сферы нам нужно создать объект типа GLUquadricObj с помощью функции gluNewQuadric. Сама функция для создания сферы выглядит так:

Где quadObj — это указатель на объект типа GLUquadricObj. 2-й параметр — это радиус сферы, а два последних параметра — число разбиений вокруг оси Z и число разбиений вдоль оси Z (ведь все сложные фигуры состоят из более простых, вроде точек, линий, треугольников). Чем большее будет разбиение, тем лучше будут выглядеть фигуры, но тем сложнее компьютеру будет нарисовать эту фигуру, соответственно, и картинка будет притормаживать при анимации.

Давайте сейчас разберем нашу функцию main(), которая теперь намного жирнее, чем была в предыдущий раз (ведь она уже готова для игры). Посмотрим на код:

Здесь должно быть все понятно. Теперь давайте займемся рисованием наших ракеток. Для этого мы будем использовать функцию auxSolidBox(int w,int h,1); из библиотеки GLAUX, где int w — это ширина коробки, int h — ее высота. Итак, напишем функцию для отображения наших ракеток, но вначале в самом верху программы (после всех #include) определим все переменные:

Все просто и по существу: bw —ширина ракетки, bh — высота ракетки, left — левый край окна, bottom — низ окна, right — правый край окна, top — верх окна, bitaStep — шаг ракетки (при нажатии на клавишу ракетка перемещается на данный промежуток), StepY, StepX — шаг мячика по оси X и Y (при большем числе скорость шарика будет быстрее), rocket_y1, rocket_y2 — положение 1-й и 2-й ракетки, x, y — координаты мячика.

Отображение ракеток:

Все объекты рисуются с точки (0,0), но иногда нам нужно нарисовать фигуру с другой точки — для этого мы должны перейти к новым координатам с помощью функции glTranslated(x,y,z). Но перед этим нужно сохранить информацию о старых координатах с помощью функции glPushMatrix(). Наконец, после всех операций над данным объектом вам нужно вернуться к старой системе координат с помощью функции glPopMatrix().

Аналогично рисуем вторую ракетку:

Теперь научимся обрабатывать клавиатуру. Для этого мы напишем функцию Keyboard(unsigned char key, int x, int y), где key — это нажатая клавиша, а x, y — положение мышки. Наша функция выглядит так:

Теперь нам осталось написать функцию для вычисления координат мячика (мячик ведь будет все время летать по экрану), а также функцию рисования самого мячика. Ниже написана функция для вычисления координат мячика:

А теперь рисуем сам мячик:

И последнее: давайте напишем маленькую функцию Display().

Теперь откомпилируем код, и… наконец-то у нас получилась игра! :-)

Ссылки по теме:

  • Учебник по C++ Builder
  • Оптимизация приложений С++ в архитектуре клиент/сервер
  • Оформление класса в виде COM объекта в C++
  • Версия для печати Версия для печати [доступна только on-line]
    Комментарии к статье
    Ваше имя:

    Ваш e-mail:
      извещать о новых отзывах в теме
    публиковать мой e-mail
    Комментарий:

    Copyright © 2003-2004 Путяк Владислав.
    Использование материалов журнала разрешается только с указанием ссылки на первоисточники и сайт журнала - http://docs.com.ru



    @ portalus.ru