Программирование стратегических игр с DirectX 9.0

Программирование стратегических игр с DirectX 9.0

Ранние стратегии реального времени

Utopia от Intellivision
Игровое поле
Земля
Здания
Форт в игре Utopia
Фабрика в игре Utopia
Океан
Корабли
Рыба погода и пираты


Трусливые пираты бороздят океан игры Utopia

Резюме
Populous от Bullfrog
Приманка
Строительство ландшафта
Благодарности
Введение
Первые популярные стратегии реального времени
Command Conquer от Westwood
Титульный экран игры Command Conquer ©2002 Electronic Arts All Rights Reserved
История

Интерфейс
Интерфейс Command Conquer ©2002 Electronic Arts All Rights Reserved
Экран радара
Индикаторы ресурсов
Объекты для постройки
Уровень энергии
Игровое поле
Технология
Храм NOD ©2002 Electronic Arts All Rights Reserved
Атака ядерных ракет на игрока GDI ©2002 Electronic Arts All Rights Reserved

Рука NOD в действии ©2002 Electronic Arts All Rights Reserved
Баланс игры
Warcraft Orcs Humans
StarCraft от Blizzard
Будущее стратегий реального времени
Широкомасштабные многопользовательские игры
Умные компьютеры
Первые стратегические игры
Warlords
Empire

Классическая игра Empire ©2003 Killer Bee Software All Rights Reserved
Command H Q
The Seven Cities of Gold
XCOM UFO Defense
Итоги
Архитектура программ Windows
Работа управляемая событиями
События
Структура программы
Структура обработки сообщений Windows

Очередь событий
Функция WinMain()
Обработчик сообщений
Пишем первую программу для Windows
Начало работы с Visual C++ 6 0
Интерфейс Visual C++ 6 0
Как создать проект
Диалоговое окно создания нового проекта в Visual C++
Диалоговое окно выбора типа Windowsприложения
Функция CreateWindowEx()

Координаты окна определяют его позицию в зависимости от того является окно дочерним или нет
Функция ShowWindow()
Получение сообщений функцией GetMessage()
Трансляция сообщений функцией TranslateMessage()
Помещение сообщений в очередь функцией DispatchMessage()
Функция обработки сообщений
Компиляция и выполнение кода
Итоги
Сюжет
Тема сюжета

Элементы сюжета
Сюжетная основа
Конечная цель сюжета
Расстановка целей
Пример для изучения — Empire Earth
Описание событий
Начальные цели
Первая цель в игре Empire Earth
Вторая и третья цели игры Empire Earth
Главные вехи

Эпохи в игре Empire Earth
Заключительная цель
Боевые единицы
Стоимость боевых единиц
Скорость боевых единиц
Вычисление скорости боевых единиц
Броня боевых единиц
Вычисление обороноспособности
Очки повреждений
Огневая мощь боевых единиц

Скорострельность
Вычисление скорострельности
Тип повреждений
Специальные повреждения
Скорость оружия
Вычисление скорости снаряда
Управление ресурсами
Выберите что вы будете пить
Определение ресурсов
Добыча ресурсов

Гидропонная фабрика
Нефтеперегонный завод
Баланс ресурсов
Пример несбалансированности
Пример сбалансированности
Скорость добычи
Дерево технологий
Простое дерево технологий
Различные типы технологий
Технологии для инфраструктуры

Технологии для вооружений
Технологии для модернизации
Стоимость технологий
Игровая кампания
Редактор миссий
Цели миссий
Многопользовательская игра
Итоги
Фаза идей
Создание наброска

Фаза определения требований
Фаза технической документации
Взаимоотношения между проектной документацией
Фаза разработки
Контроль исходного кода
Управление метками
Отслеживание ошибок
Отслеживание
Привязка к исходному коду
Метрики качества

Тестирование отдельных частей
Фаза тестирования
Процесс тестирования
Фаза производства
Распространение

Программирование стратегических игр с DirectX 9.0

Условно бесплатные программы
Сайты аукционов
Издатели
Итоги
Основы блочной графики

Что такое блок?
Мозаика из блоков на экране
Пример ландшафтных блоков
Зачем использовать блоки?
Использование блоков для экономии памяти
Пример карты для размещения блоков
Применение блоков для повторного использования графики
Простая игровая карта
Простая игровая карта состоящая из блоков
Использование блоков для динамического содержимого

Как создавать блоки?
Выбор размера блоков
Интерфейс с видимым фрагментом 16 x 16 блоков
Определение необходимых блоков
Несколько блоков из набора
Как отображать блоки?
Отображение двухмерной сетки
Двухмерная сетка для размещения блоков
Порядок двухмерных блоков
Как вычислить местоположение в массиве

Как вычислить видимую позицию
Отображение изометрических блоков
Базовая карта изометрических блоков
Порядок отображения изометрических блоков
Отображение трехмерных блоков
Пример карты из трехмерных блоков
Многослойные блоки
Добавление деталей к блокам
Три блочных карты с различным уровнем детализации
Блок с изображением травы с камнями на ней

Три блока трава песок и камни
Переходные блоки
Блочная карта из травы и песка
Блочная карта с плавными переходами от травы к песку
Блоки для переходов в направлении с юга на север
Блоки для переходов в направлении с востока на запад
Переходные блоки для углов
Совместное использование угловых блоков с другими переходными блоками
Ошибки возникающие при использовании четырех угловых блоков
Перевернутые угловые блоки в действии

Блоки с изображениями дорог
Новый блок с изображением дороги помешается рядом с существующими дорогами
Исследуем блоки расположенные вокруг нового
Соседние блоки с присвоенными номерами
Как добавить трехмерные деревья
Пальмовая роща со зданием в центре
Разоблачение поддельных трехмерных деревьев
Анимированные блоки
Редактирование и хранение блоков
Хранение блоков в двухмерном массиве

Блочная карта из 100 элементов
Карта с составленной из блоков буквой О
Хранение многослойных блоков
Блочная карта с двумя слоями
Создание класса для представления блоков
Заголовок класса
Реализация класса
Пример использования класса
Свойства блоков
Проходимость

Использование свойства проходимости при поиске пути
Возвышенность
Яркость
Использование яркости блока для эффекта тумана войны
Смещение
Блоки разных размеров визуализированные без смещения
Отображение блоков
Отображение двухмерных блоков
Окно программы демонстрирующей визуализацию двухмерных блоков
Архитектура проекта D3DFrame_2DTiles

Структура файлов программы демонстрирующей двухмерную блочную графику
Заголовочный файл Main h
Файл программы Main cpp
Поток выполнения программы отображающей двухмерные блоки
Отображение двухмерных изометрических блоков
Окно программы демонстрирующей визуализацию двухмерных изометрических блоков
Архитектура проекта D3DFrame_Isometric2DTiles
Заголовочный файл Main h
Файл программы Main cpp
Отображение двухмерных изометрических блоков со спрайтами

Окно программы демонстрирующей
Архитектура проекта D3DFrame_Isometric2DSpriteTiles
Заголовочный файл Main h
Файл программы Main cpp
Зачем использовать спрайты?
Отображение трехмерных блоков
Окно программы демонстрирующей визуализацию трехмерных блоков
Архитектура проекта D3DFrame_3DTiles
Заголовочный файл Main h
Файл программы Main cpp

Загрузка трехмерных моделей
Точечный источник света
Визуализация трехмерных моделей
Итоги
Определение требований к интерфейсу
Активные зоны и графика
Детализация схемы интерфейса
Взаимосвязь шаблонов интерфейса
Стартовый экран игры Battle Armor
Схема кадра стартового экрана игры Battle Armor

Звуковое оформление интерфейса
Схема кадра с основным меню
Состояния интерфейса
Схема кадра меню режима "схватка"
Схема кадра меню многопользовательской схватки
Схема кадра с меню игрового сервера
Раскадровка интерфейса
Раскадровка интерфейса игры Battle Armor
Удобство и простота интерфейса
Щелчки мышью и взаимодействие с интерфейсом

Сложность навигации по меню
Согласованность интерфейса
Двухмерная графика в Direct3D
Окно программы TitleScreen
Архитектура проекта D3D_TitleScreen
Заголовочный файл Main h
Ключевые типы данных Direct3D
Структура данных настраиваемого формата вершин (FVF)
Данные местоположения
Треугольник образованный тремя точками в трехмерном пространстве

Данные нормали
Нормаль треугольной грани
Данные текстуры
Координаты текстуры указываются относительно ее размера
Определение формата вершины
Прототипы функций
Файл программы Main cpp
Функция WinMain()
Структура вызовов других функций в функции WinMain()
Вычисление смещения клиентской области

Окно размером 640 x 480
Измененное окно размером 640 x 504
Функция InitD3D()
Ход выполнения функции InitD3D()
Создание объекта Direct3D
Настройка параметров отображения
Двойная буферизация в действии
Сглаживание
Создание устройства трехмерной визуализации
Настройка среды визуализации

Функция vInitInterfaceObjects()
Полоса треугольников используемая для двухмерной визуализации
Создание буфера вершин
Блокировка буфера вершин
Заполнение буфера вершин данными

Программирование стратегических игр с DirectX 9.0

Геометрия используемая для двухмерной визуализации в трехмерном пространстве
Загрузка текстур
Функция vRender()
Функция vDrawInterfaceObject()
Отображение текстуры в трехмерном пространстве на экране

Расположение текстур на титульном экране
Горячие точки или как я научился любить щелчки мыши
Обнаружение активных зон
Окно программы D3D_MouseZones
Архитектура проекта D3D_MouseZones
Заголовочный файл Main h
Глобальные данные активных зон
Файл программы Main cpp
Функция WinMain()
Первый экран программы D3D_MouseZones

Функция vSetupMouseZones()
Функция MouseZoneClass vFreeZones()
Функция MouseZoneClass vInitialize()
Функция MouseZoneClass iAddZone()
Функция vCheckInput()
Управление щелчками мыши
Вычисление смещения клиентской области окна на рабочем столе
Различия между клиентской областью и пространством рабочего стола
Перемещение окна на рабочем столе
Вычисление местоположения указателя мыши

Функция MouseZoneClass bCheckZones()
Обнаружение сообщений кнопок мыши
Выход из программы
Динамическое отображение меню
Заголовочный файл MouseZoneClass h
Структура данных stHotSpot
Взаимосвязь между структурой данных и активной зоной
Закрытые члены данных класса MouseZoneClass
Функции класса MouseZoneClass
Файл MouseZoneClass cpp

Функция MouseZoneClass MouseZoneClass()
Функция MouseZoneClass ~MouseZoneClass()
Функция MouseZoneClass vInitialize()
Функция MouseZoneClass vFreeZones()
Функция MouseZoneClass iAddZone()
Функция MouseZoneClass iRemoveZone()
Функция MouseZoneClass bCheckZones()
Подсветка пунктов меню
Архитектура проекта D3D_MouseZoneHighlights
Заголовочный файл Main h

Главное меню с подсветкой кнопки Options
Файл программы Main cpp
Как определить подсвечиваемую активную зону
Как создать подсвечиваемую активную зону
Как отобразить подсветку активной зоны
Изображения меню для реализации подсветки
Итоги
Звуковые API
Архитектура DirectMusic
Загрузчик DirectMusic

Исполнитель DirectMusic
Сегменты DirectMusic
Как воспроизвести файл WAV
Проект DMusic_PlaySound
Поток выполнения программы DMusic_PlaySound
Заголовочный файл Main h
Этапы инициализации DirectMusic
Функция vPlaySound()
Воспроизведение звука
Как воспроизвести файл MIDI

Окно программы DMusic_PlayMIDI
Как воспроизвести файл MP3
Окно программы DShow_PlayMP3
DirectShow
Проект DShow_PlayMP3
Заголовочный файл Main h
Граф фильтров
Граф фильтров MP3
Управление аудиовизуальным потоком
События аудиовизуального потока

Позиционирование аудиовизуального потока
Файл программы Main cpp
Функция bPlayTitleMusic()
Инициализация DirectShow
Этапы инициализации DirectShow
Загрузка музыкального файла
Установка темпа воспроизведения
Воспроизведение музыки
Перехват фоновых событий
Функция vCheckMusicStatus()

Проверка кода события
Остановка музыки
Перемотка музыки
Запуск музыки
Поток исполнения программы воспроизведения MP3
Реализация классов звуковой системы
Класс звуковой системы
Структура класса звуковой системы
Определение класса звуковой системы
Определение класса звукового фрагмента

Взаимодействие класса звуковой системы и класса звукового фрагмента
Реализация класса звуковой системы
Деструктор SoundSystem ~SoundSystem()
Функция SoundSystem hrInitSoundSystem()
Функция SoundSystem hrLoadSound()
Функция SoundSystem hrPlaySound()
Реализация класса звукового фрагмента
Взаимодействие объектов классов звуковой системы и звукового фрагмента
Пример использования класса звуковой системы
Окно программы DSound_SoundSystem

Инициализация класса звуковой системы
Воспроизведение звуковых фрагментов
Работа программы использующей класс звуковой системы
Использование класса звуковой системы в меню
Структура реализации звуковой системы в заголовочном файле проекта D3D_MenuSounds
Структура реализации звуковой системы в главном файле проекта D3D_MenuSoundsSound
Итоги
Проектирование подразделений
Название подразделения
Способ передвижения

Передвижение по земле
Передвижение по воздуху
Передвижение по воде
Полеты в космосе
Скорость передвижения
Скороость передвижения
Тип атаки
Два типа подразделений используют один тип атаки
Тип защиты
Два подразделения с различными типами защиты

Содержание раздела