ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



         

Спрайты - часть 11


Приложение Sprites — это DOOM-образная игра. Если вам еще не приходилось иметь дело с DOOM, ребята из Id Software наверняка с большим удовольствием продадут вам ее (но пожалуйста, не заказывайте игру сейчас, иначе вы никогда не закончите читать эту книгу!)

Основная цель игры (моей, а не DOOM!) — выслеживать врагов и издавать громкие звуки, имитирующие выстрелы из оружия, которое бы вам хотелось иметь при себе в подобной ситуации. Действие игры происходит в лабиринте стен, построенных из красного вещества. Стены абсолютно непрозрачны и кажутся довольно прочными, однако вы наделены магическими силами и можете проходить прямо сквозь них. Пол лабиринта покрыт дешевым ковром.

Для этой игры вам понадобится джойстик. Я воспользовался своим SideWinder Pro и настроил его так, чтобы кнопка 1 (гашетка на SideWinder) выполняла стрельбу. Если у вас есть только мышь, вы все равно сможете находить врагов, однако выстрелы придется вообразить. На Рисунок 9-10 показан вид экрана в начале игры — собственно, ничего больше вам знать и не потребуется.

Рисунок. 9-10. Похоже, хозяев нет дома


При разработке этого приложения я воспользовался планом лабиринта, изображенным на Рисунок 9-11 (для самых недогадливых он станет подсказкой).

/b> ¦¦¦И' Глава 9. Спрайты

. План лабиринта


Каждая стена лабиринта состоит из четырех граней, и на каждую грань наложена красная текстура. Для стен я создал класс CWall, производный от C3dShape, код которого мало отличается от того, что мы видели в предыдущих главах, и потому я не стану приводить его. Построение лабиринта с помощью класса CWall происходит следующим образом:

BOOL CMainFrame::NewScene() {

WALLINFO wi [] = {

(-6, 5, 6, 6, 1},

{ 5, -5, 6, 5, 0.9},

{-6, -6, 6, -5, 1.1},

(-6, -5, -5, 5, 0.8},

(-3, 2, 2, 3, 0.5},

( 2, -3, 3, 3, 0.9},

(-4, -1, 0, 0, 1},

(-1, -5, 0, -2, 1.3}

};

int nWalls = sizeof(wi) / sizeof(WALLINFO);

WALLINFO* pwi = wi;

for (int i = 0; i « nWalls; i++) {

CWall* pWall = new CWall(pwi);

m_pScene-»AddChild(pWall) ;




Содержание  Назад  Вперед