Оглавление
- Благодарности
- Введение
- Для кого предназначена эта книга
- Что ожидать от книги
- Сопроводительные файлы и поддержка
- Часть 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. Трехмерная анимация
- Краткий обзор
- Обзор трехмерной анимации
- Сцена
- Объекты
- Фиксированные объекты
- Ключевые кадры
- Автоматическая вставка промежуточных кадров
- Анимационные наборы
- Импорт содержимого
- Экспорт из 3ds max
- Основы моделирования
- Загрузка объекта
- Программа Convert 3DS
- Редактирование анимации
- Готовые редакторы анимации
- Программирование собственного редактора
- Интерфейс редактора анимации
- Команды редактора анимации
- Команды работы с кадрами
- Команды работы с объектами
- Команды воспроизведения
- Команды работы с файлами
- Процесс редактирования
- Сохранение и загрузка
- Программирование редактора
- Элементы управления программы D3D_AnimationEditor
- Проект D3D_AnimationEditor
- Класс C3DAnimation
- Методы класса C3DAnimation
- Члены данных класса C3DAnimation
- Структура stKeyFrame
- Реализация методов класса C3DAnimation
- Конструктор класса C3DAnimation
- Деструктор класса C3DAnimation
- Функция C3DAnimation::vReset()
- Функция C3DAnimation::vNewFrame()
- Функция C3DAnimation::iNextFrame()
- Функция C3DAnimation::iPrevFrame()
- Функция C3DAnimation::iStartFrame()
- Функция C3DAnimation::iNewObj()
- Функция C3DAnimation::vUpdateTrans()
- Функция C3DAnimation::vUpdateRot()
- Функция C3DAnimation::vUpdateScale()
- Функция C3DAnimation::vSave()
- Функция C3DAnimation::vLoad()
- Функция C3DAnimation::vSet3DDevice()
- Программа D3D_AnimationEditor
- Функция vInitAnimation()
- Функция vLoadObject()
- Создание кадров
- Выбор необходимого объекта
- Изменение местоположения объекта
- Добавление ключевых кадров
- Функция vRender()
- Управление с клавиатуры
- Что еще можно сделать
- Реализация анимации
- Итоги
- Часть IV. Дополнительные темы
- Глава 12. Поиск пути
- Краткий обзор
- Задача поиска пути
- Простое решение
- Поиск пути по алгоритму A*
- Основы A*
- Начало поиска
- Вычисление стоимости узлов
- Базовая стоимость узла
- Стоимость относительно начального узла
- Стоимость относительно цели
- Общая стоимость
- Поиск наилучшего узла
- Продолжение поиска
- Обратная трассировка для нахождения пути
- Реализация в коде
- Функция инициализации пути
- Функция CPathFinder::bFindPath()
- Итоги и оптимизация
- Глава 13. Визуализация частиц
- Краткий обзор
- Основные сведения о частицах
- Характеристики частиц
- Изображение частиц
- Движение частиц
- Анимация частиц
- Структура класса частиц
- Класс CVector
- Класс CParticle
- Члены данных
- Методы класса
- Функция CParticle::vUpdate()
- Реализация системы частиц
- Структура проекта D3D_Particles
- Инициализация частиц
- Визуализация частиц
- Итоги
- Глава 14. Пример сетевого программирования
- Краткий обзор
- Сетевые соединения
- Игра по локальной сети
- BNC — шаг вперед!
- Соединения витой парой
- Соединение через кросс-кабель
- Сеть с концентратором
- Сеть с коммутатором
- Маршрутизаторы — ворота в Интернет
- Сетевые протоколы
- Протокол TCP/IP
- Протокол UDP
- TCP/IP против UDP
- Пакеты
- Задержка
- Одноранговые сети
- Сети клиент-сервер
- Сравнение одноранговых сетей и сетей клиент-сервер
- Сокеты и DirectPlay
- Пример программирования сокетов
- Программа Sockets_Receive
- Включение заголовочного файла WinSock
- Установка версии WinSock
- Создание сокета
- Поиск сервера по URL
- Установка номера порта
- Подключение к серверу
- Отправка данных серверу
- Получение данных от сервера
- Закрытие сокета
- Отключение сокетов
- Программирование сетевых походовых игр
- Ход выполнения походовой игры
- Программа Sockets_TurnGame
- Глобальные переменные программы Sockets_TurnGame
- Функции программы Sockets_TurnGame
- Функция vHost()
- Функция vConnect()
- Функция vTurnDone()
- Функция vSendTurnMessage()
- Функция vReceiveTurnMessage()
- Итоги
- Приложение A. Photoshop — лучший редактор для текстур
- Краткий обзор
- Adobe Photoshop
- Создание снимков экрана с помощью Photoshop
- Диалоговое окно создания нового изображения
- Установка атрибутов изображения
- Вставка изображения из буфера
- Компоновка изображения
- Сохранение изображения
- Слои
- Эксперименты со слоями
- Перемещение слоев
- Изменение порядка слоев
- Изменение прозрачности слоя
- Эффекты
- Свойства слоя
- Параметры смешивания
- Падающая тень
- Фильтры
- Альфа-карты
- Делаем альфа-карту
- Вкладка Channels
- Инструмент Magic Wand
- Выбор фрагмента
- Создание маски
- Инвертирование маски
- Сохранение изображения
- Итоги
- Приложение B. Ресурсы для разработчика
- Алфавитный указатель