652


Оглавление

Благодарности Введение Для кого предназначена эта книга Что ожидать от книги Сопроводительные файлы и поддержка Часть I. Основы Глава 1. Экскурс в прошлое Краткий обзор Первые стратегии реального времени Utopia от Intellivision Игровое поле Земля Здания Океан Корабли Рыба, погода и пираты Резюме Populous от Bullfrog Приманка Строительство ландшафта Первые популярные стратегии реального времени Command & Conquer от Westwood История Интерфейс Экран радара Индикаторы ресурсов Объекты для постройки Уровень энергии Игровое поле Технология Баланс игры Warcraft: Orcs & Humans StarCraft от Blizzard Будущее стратегий реального времени Широкомасштабные многопользовательские игры Умные компьютеры Первые стратегические игры Warlords Empire Command H.Q. The Seven Cities of Gold X-COM: UFO Defense Итоги Глава 2. Основы программирования в Windows Краткий обзор Архитектура программ для Windows Работа, управляемая событиями События Структура программы Очередь событий Функция WinMain() Обработчик сообщений Пишем первую программу для Windows Начало работы с Visual C++ 6.0 Как создать проект Рабочее пространство Файлы ресурсов Добавление исходных файлов в проект Погружаемся и сталкиваемся с кодом Включение файлов и прототипы функций Внутреннее устройство функции WinMain() Структура данных WNDCLASSEX Функция RegisterClassEx() Функция CreateWindowEx() Функция ShowWindow() Получение сообщений функцией GetMessage() Трансляция сообщений функцией TranslateMessage() Помещение сообщений в очередь функцией DispatchMessage() Функция обработки сообщений Компиляция и выполнение кода Итоги Глава 3. Механика игры Краткий обзор Сюжет Тема сюжета Элементы сюжета Сюжетная основа Конечная цель сюжета Расстановка целей Пример для изучения — Empire Earth Описание событий Начальные цели Главные вехи Заключительная цель Боевые единицы Стоимость боевых единиц Скорость боевых единиц Вычисление скорости боевых единиц Броня боевых единиц Вычисление обороноспособности Очки повреждений Огневая мощь боевых единиц Скорострельность Вычисление скорострельности Тип повреждений Специальные повреждения Скорость оружия Вычисление скорости снаряда Управление ресурсами Выберите, что вы будете пить Определение ресурсов Добыча ресурсов Баланс ресурсов Пример несбалансированности Пример сбалансированности Скорость добычи Дерево технологий Различные типы технологий Технологии для инфраструктуры Технологии для вооружений Технологии для модернизации Стоимость технологий Игровая кампания Редактор миссий Цели миссии Многопользовательская игра Итоги Глава 4. Планирование игрового проекта Краткий обзор Фаза идей Создание наброска Фаза определения требований Фаза технической документации Фаза разработки Контроль исходного кода Управление метками Отслеживание ошибок Отслеживание Привязка к исходному коду Метрики качества Тестирование отдельных частей Фаза тестирования Фаза производства Распространение Условно-бесплатные программы Сайты аукционов Издатели Итоги Часть II. Строительные блоки Глава 5. Блочная графика Краткий обзор Основы блочной графики Что такое блок? Зачем использовать блоки? Использование блоков для экономии памяти Применение блоков для повторного использования графики Использование блоков для динамического содержимого Как создавать блоки? Выбор размера блоков Определение необходимых блоков Как отображать блоки? Отображение двухмерной сетки Как вычислить местоположение в массиве Как вычислить видимую позицию Отображение изометрических блоков Отображение трехмерных блоков Многослойные блоки Добавление деталей к блокам Переходные блоки Блоки с изображениями дорог Как добавить трехмерные деревья Анимированные блоки Редактирование и хранение блоков Хранение блоков в двухмерном массиве Хранение многослойных блоков Создание класса для хранения блоков Заголовок класса Реализация класса Пример использования класса Свойства блоков Проходимость Возвышенность Яркость Смещение Отображение блоков Отображение двухмерных блоков Архитектура проекта D3DFrame_2DTiles Заголовочный файл Main.h Файл программы Main.cpp Отображение двухмерных изометрических блоков Архитектура проекта D3DFrame_Isometric2DTiles Заголовочный файл Main.h Файл программы Main.cpp Отображение двухмерных изометрических блоков со спрайтами Архитектура проекта D3DFrame_Isometric2DSpriteTiles Заголовочный файл Main.h Файл программы Main.cpp Зачем использовать спрайты? Отображение трехмерных блоков Архитектура проекта D3DFrame_3DTiles Заголовочный файл Main.h Файл программы Main.cpp Загрузка трехмерных моделей Точечный источник света Визуализация трехмерных моделей Итоги Глава 6. Проектирование и разработка интерфейса Краткий обзор Определение требований к интерфейсу Активные зоны и графика Детализация схемы интерфейса Взаимосвязь шаблонов интерфейса Звуковое оформление интерфейса Состояния интерфейса Раскадровка интерфейса Удобство и простота интерфейса Щелчки мышью и взаимодействие с интерфейсом Сложность навигации по меню Согласованность интерфейса Двухмерная графика в Direct3D Архитектура проекта D3D_TitleScreen Заголовочный файл Main.h Ключевые типы данных Direct3D Структура данных настраиваемого формата вершин (FVF) Данные местоположения Данные нормали Данные текстуры Определение формата вершины Прототипы функций Файл программы Main.cpp Функция WinMain() Вычисление смещения клиентской области Функция InitD3D() Создание объекта Direct3D Настройка параметров отображения Создание устройства трехмерной визуализации Настройка среды визуализации Функция vInitInterfaceObjects() Создание буфера вершин Блокировка буфера вершин Заполнение буфера вершин данными Загрузка текстур Функция vRender() Функция vDrawInterfaceObject() Горячие точки, или как я научился любить щелчки мыши Обнаружение активных зон Архитектура проекта D3D_MouseZones Заголовочный файл Main.h Глобальные данные активных зон Файл программы Main.cpp Функция WinMain() Функция vSetupMouseZones() Функция MouseZoneClass::vFreeZones() Функция MouseZoneClass::vInitialize() Функция MouseZoneClass::iAddZone() Функция vCheckInput() Управление щелчками мыши Вычисление смещения клиентской области окна на рабочем столе Вычисление местоположения указателя мыши Функция MouseZoneClass::bCheckZones() Обнаружение сообщений кнопок мыши Выход из программы Динамическое отображение меню Заголовочный файл MouseZoneClass.h Структура данных stHotSpot Закрытые члены данных класса MouseZoneClass Функции класса MouseZoneClass Файл MouseZoneClass.cpp Функция MouseZoneClass::MouseZoneClass() Функция MouseZoneClass::~MouseZoneClass() Функция MouseZoneClass::vInitialize() Function Функция MouseZoneClass::vFreeZones() Function Функция MouseZoneClass::iAddZone() Function Функция MouseZoneClass::iRemoveZone() Function Функция MouseZoneClass::bCheckZones() Function Подсветка пунктов меню Архитектура проекта D3D_MouseZoneHighlights Заголовочный файл Main.h Файл программы Main.cpp Как определить подсвечиваемую активную зону Как создать подсвечиваемую активную зону Как отобразить подсветку активной зоны Итоги Глава 7. Добавляем к игре звук Краткий обзор Звуковые API Архитектура DirectMusic Загрузчик DirectMusic Исполнитель DirectMusic Сегменты DirectMusic Как воспроизвести файл WAV Проект DMusic_PlaySound Заголовочный файл Main.h Файл программы Main.cpp Функция bInitializeSoundSystem() Как инициализировать COM Создание интерфейса загрузчика Создание интерфейса исполнителя Инициализация аудиосистемы Как регулировать громкость Загрузка звукового файла Как загрузить сегмент Функция vPlaySound() Воспроизведение звука Как воспроизвести файл MIDI Как воспроизвести файл MP3 DirectShow Проект DShow_PlayMP3 Заголовочный файл Main.h Граф фильтров Управление аудиовизуальным потоком События аудиовизуального потока Позиционирование аудиовизуального потока Файл программы Main.cpp Функция bPlayTitleMusic() Инициализация DirectShow Загрузка музыкального файла Установка темпа воспроизведения Воспроизведение музыки Перехват фоновых событий Функция vCheckMusicStatus() Проверка кода события Остановка музыки Перемотка музыки Запуск музыки Реализация классов звуковой системы Класс звуковой системы Определение класса звуковой системы Определение класса звукового фрагмента Реализация класса звуковой системы Деструктор SoundSystem::~SoundSystem() Функция SoundSystem::hrInitSoundSystem() Функция SoundSystem::hrLoadSound() Функция SoundSystem::hrPlaySound() Реализация класса звукового фрагмента Пример использования класса звуковой системы Инициализация класса звуковой системы Воспроизведение звуковых фрагментов Использование класса звуковой системы в меню Итоги Глава 8. Да будут войска! Краткий обзор Проектирование подразделений Название подразделения Способ передвижения Передвижение по земле Передвижение по воздуху Передвижение по воде Полеты в космосе Скорость передвижения Тип атаки Тип защиты Программирование шаблона Класс CUnitDefense Члены данных класса CUnitDefense Коэффициенты защиты Очки повреждений Скорость восстановления Тип защиты Название защиты Методы класса CUnitDefense Класс CUnitOffense Члены данных класса CUnitOffense Коэффициенты поражения Радиус взрыва Скорострельность Скорость снаряда Дальнобойность Тип атаки Название типа атаки Методы класса CUnitOffense Класс CUnitMovement Члены данных класса CUnitMovement Скорость передвижения Способ передвижения Ускорение и торможение Скорость поворота Методы класса CUnitMovement Класс CUnitAnimation Члены данных класса CUnitAnimation Анимация ожидания Анимация передвижения Анимация атаки Анимация гибели Начальный кадр анимации Данные текстуры Методы класса CUnitAnimation Функция CUnitAnimation::vSetRenderDevice() Функция CUnitAnimation::vLoadTextures() Цвета владельца Функция CUnitAnimation::vReset() Класс CTexture Члены данных класса CTexture Методы класса CTexture Функция CTexture::vLoad() Функция CTexture::vRelease() Функция CTexture::vSetRenderDevice() Класс CUnit Члены данных класса CUnit Методы класса CUnit Функция CUnit::vReset() Функция CUnit::vSetBaseValues() Функция CUnit::vSetPosition() Класс CUnitManager Загрузка базовых типов Функция CUnitManager::iLoadBaseTypes() Функция CUnitManager::ptrGetDefenseType() Создание подразделений Функция CUnitManager::iAddUnit() Управление текстурами Рисование подразделений Функция vDrawUnit() Функция vRender() Использование альфа-канала Отображение активных подразделений Обновление кадра анимации Обработка ожидающих подразделений Обработка поворачивающих подразделений Обработка атакующих подразделений Обработка гибнущих подразделений Обработка перемещающихся подразделений Загрузка и создание подразделений Итоги Глава 9. За кулисами клавиатуры Краткий обзор Обзор DirectInput Интерфейс IDirectInput8 Интерфейс IDirectInputDevice8 Ввод с клавиатуры Проект DInput_Simple Инициализация DirectInput Функция iInitDirectInput() Функция iInitKeyboard() Буферизованный ввод с клавиатуры Функция IDirectInputDevice8::SetProperty() Установка формата данных клавиатуры Установка уровня кооперации Захват клавиатуры Раскладка клавиатуры Чтение данных клавиатуры Функция iReadKeyboard() Определение состояния DIK Преобразование кода DIK в код ASCII Ввод текста в игре Навигация по меню Активация ввода текста Обработка текстового ввода Отображение введенного текста Интерфейс шрифта Функция ID3DXFont::DrawText() Итоги Часть III. Инструменты разработчика Глава 10. Редактируем карту мира Краткий обзор Основы редактирования карт Компоненты редактора карт Область редактирования Область выбора блоков Мини-карта Область вывода информации Просмотр карты Глобальные переменные карты Ход выполнения программы Генерация случайной карты Навигация по карте Загрузка изображений блоков Визуализация блоков Редактирование карты Глобальные переменные карты Ход выполнения программы Программирование панели инструментов Отображение блоков на панели инструментов Редактирование карты Сохранение и загрузка карты Функция SaveMap() Функция LoadMap() Отображение мини-карты Функция vCreateMinimap() Функция vRenderMinimap() Алгоритмы генерации карт Функция vGenerateMap() Методы генерации карт Многослойные карты Изменения в заголовочном файле Многомерный массив Функция смены слоя Переменные для новых кнопок Изменения в функции vCreateToolbar() Функция vChangeLayer() Изменение процедур сохранения и загрузки Изменения в функции vRender() Изменения в функции vCheckMouse() Итоги Глава 11. Трехмерная анимация Часть IV. Дополнительные темы Глава 12. Поиск пути Краткий обзор Задача поиска пути Простое решение Поиск пути по алгоритму A* Основы A* Начало поиска Вычисление стоимости узлов Базовая стоимость узла Стоимость относительно начального узла Стоимость относительно цели Общая стоимость Поиск наилучшего узла Продолжение поиска Обратная трассировка для нахождения пути Реализация в коде Функция инициализации пути Функция CPathFinder::bFindPath() Итоги и оптимизация Глава 13. Визуализация частиц Краткий обзор Основные сведения о частицах Характеристики частиц Изображение частиц Движение частиц Анимация частиц Структура класса частиц Класс CVector Класс CParticle Члены данных Методы класса Функция CParticle::vUpdate() Реализация системы частиц Структура проекта D3D_Particles Инициализация частиц Визуализация частиц Итоги Глава 14. Пример сетевого программирования Приложение A. Photoshop — лучший редактор для текстур Приложение B. Ресурсы для разработчика Алфавитный указатель



- Начало - - Назад - - Вперед -