Программирование стратегических игр с 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
Отображение двухмерных изометрических блоков со спрайтами
Окно программы демонстрирующей
Архитектура проекта D3DFrame_Isometric2DSpriteTiles
Зачем использовать спрайты?

Загрузка трехмерных моделей
Точечный источник света
Визуализация трехмерных моделей
Определение требований к интерфейсу

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

Схема кадра с меню игрового сервера
Раскадровка интерфейса
Раскадровка интерфейса игры Battle Armor
Удобство и простота интерфейса
Щелчки мышью и взаимодействие с интерфейсом
Сложность навигации по меню
Согласованность интерфейса
Двухмерная графика в Direct3D
Окно программы TitleScreen
Архитектура проекта D3D_TitleScreen

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

Прототипы функций
Файл программы Main cpp
Структура вызовов других функций в функции WinMain()
Вычисление смещения клиентской области
Окно размером 640 x 480
Измененное окно размером 640 x 504
Функция InitD3D()
Ход выполнения функции InitD3D()
Создание объекта Direct3D

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

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

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

Обнаружение активных зон
Окно программы D3D_MouseZones
Архитектура проекта D3D_MouseZones
Глобальные данные активных зон
Первый экран программы D3D_MouseZones
Функция vSetupMouseZones()
Функция MouseZoneClass vFreeZones()

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

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

Функция MouseZoneClass iRemoveZone()
Подсветка пунктов меню
Архитектура проекта D3D_MouseZoneHighlights
Главное меню с подсветкой кнопки Options

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

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

Окно программы DShow_PlayMP3
DirectShow
Проект DShow_PlayMP3
Граф фильтров
Граф фильтров MP3
Управление аудиовизуальным потоком
События аудиовизуального потока
Позиционирование аудиовизуального потока

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

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

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

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

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