Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 17:

Программирование простой игры в DirectX

Аннотация: Программирование движка игры. Создание устройства в главном классе. Установка камеры и освещения сцены. Добавление кода запуска рендеринга. Добавление кода создания дороги. Фильтрация текстуры дороги. Имитация движения дороги. Создание автомобиля. Добавление к проекту нового класса Car. Добавление свойств в класс Car. Создание объекта Car в движке игры. Клавиатурное управление автомобилем. Добавление препятствий. Генерация одного препятствия в конструкторе класса. Другие заготовки для создания препятствий. Добавление вращений к препятствиям. Оформление атрибутики игры. Разработка табло результатов. Добавление текстовых надписей и запись лучших результатов в системный реестр.
Ключевые слова: directx, UML, игра, CAR, obstacle, self-reference, DLL, direct3d, Solution Explorer, конструктор класса, инструкция, release, операции, класс, отображение, базовый класс, инициализация объекта, буфер, программный способ, вычисление, flagging, оболочка, проекция, переопределение, override, объект, текстура, значение, имя класса, переменная, region, объявление переменной, EXISTS, JPG, файл, текущий каталог, функция, управление процессами, константы, расстояние, фигурные скобки, пиксел, поддержка, размытие, таймер, utility, SDK, переменная класса, статические методы, finally, тело метода, пользователь, sphere, cube, torus, cylinder, параметр, радиус, затраты, массив, адресация, disposal, деструктор, collection, IENumerable, ArrayList, динамические массивы, коллекция объектов, метод перебора, foreach, виртуальный метод, remove, clearing, абстрактный класс, полиморфизм, FCL, множественное наследование, класс приложений, пространство, куча, динамический массив, размерность, вызов функции, место, поле класса, spacing, escape, компилятор, псевдоним, длина цепочки, список, текущий счет, приложение, C, Basic, файлы ресурсов, build, Размещение, запись, цикла

Файлы к лабораторной работе Вы можете скачать здесь.

В настоящей лабораторной работе мы используем средства управляемого DirectX и построим простую игру. Для любого коммерческого варианта игры нужно вначале построить подробный план, в котором тщательно продумать все существенные детали и игру в целом. Обычно для этого применяется язык диаграмм UML. Но наша игра простая и цели наши другие.

Программу построим из трех основных классов:

  1. Основной класс формы - DodgerGame (движок игры)
  2. Класс управления автомобилем - Car
  3. Класс управления препятствиями - Obstacle

Создание заготовки приложения

  • Выберите каталог для размещения проекта и командой File/New/Project создайте новый пустой проект C# с именем Dodger

  • Выполните команду меню Project/Add Reference и добавьте к проекту ссылки на следующие библиотечные сборки
    • System.dll
    • System.Drawing.dll
    • System.Windows.Forms.dll
    • Microsoft.DirectX.dll
    • Microsoft.DirectX.Direct3D.dll
    • Microsoft.Directx.Direct3DX.dll

Примечание. В трех последних сборках выбирайте версии в соответствии с рисунком


  • Командой меню Project/Add New Item добавьте к проекту класс DodgerGame, который будет играть роль движка нашей игры

  • Удалите из проекта автоматически сгенерированные при добавлении класса ненужные ссылки на библиотечные сборки


  • Добавьте в начало файла DodgerGame.cs соответствующие using -директивы
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
Листинг 17.1. Добавление using-директив в файле DodgerGame.cs
  • Сделайте класс DodgerGame наследником библиотечного класса Form (отметьте, что пиктограмма класса в панели Solution Explorer сразу изменилась) и пропишите конструктор класса DodgerGame следующим образом
public class DodgerGame : Form
  {
    public DodgerGame()
    {
      this.Size = new Size(800, 600); // Размер окна формы
      this.Text = "Lab37. Игра Dodger"; // Заголовок окна
    }
  }
Листинг 17.2. Конструктор класса DodgerGame
  • Добавьте в проект командой Project/Add New Item новый класс с именем AppEntry, в котором разместите точку входа приложения

  • Отредактированный класс должен быть таким
namespace Dodger
{
  public class AppEntry
  {
    static void Main()
    {
      using (DodgerGame frm = new DodgerGame())
      {
        System.Windows.Forms.Application.Run(frm);
      }
    }
  }
}
Листинг 17.3. Класс AppEntry с точкой входа приложения

Инструкция using в данном применении заставит сборщик мусора выполниться сразу же после завершения ее работы.

  • Установите командой Project/Dodger Properties в окне свойств проекта оконный режим работы приложения

  • Установите режим Release работы компилятора и постройте проект. Должна появиться пустая форма

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

Программирование движка игры

Движком игры у нас будет класс DodgerGame. Именно в нем мы будем организовывать отображение сцены и управление игрой. Визуально этот класс представлен окном формы, поскольку наследует базовый класс Form.