CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
Тайваньская компания MSI осуществила сегодня анонс фирменной модели графического ускорителя GeForce ...
Компания Manli опубликовала официальный пресс-релиз, посвященный своей новой видеокарте. Энтузиастам ...
Компания Sony накануне раскрыла некоторые подробности доступности своего нового флагманского смартфона ...
В списке новинок формата фаблет японская компания Sony готовит нового флагмана, который в настоящее ...
Компания Acer сделала наконец официально доступным свой новый ноутбук, рассчитанный на профессиональных ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

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

(Окончание, начало см. в МК № 22, 25 (193, 196))

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

В этой статье мы научимся рисовать сферы (это будет наш мячик), четырехугольники (ракетки), обрабатывать клавиатуру (нам же нужно как-то управлять ракетками), ну и еще некоторые мелочи. Но обо всем по порядку. Итак, начнем с сфер. Для рисования сферы нам нужно создать объект типа 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().

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

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить






Рейтинг@Mail.ru
Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov