Загрузка...
 
Печать

Программируем Role Palying Game (RPG) (Win32, C++, DirectX8)


Предисловие. Что и чем будем кодить

Diablo 3 (2012, Blizzard Entertainment)
Diablo 3 (2012, Blizzard Entertainment)

Каждый новый курс - это новый подход к созданию игры, который обязательно заинтересует энтузиастов.
Role Playing Game (или ролевая игра) - один из самых популярный жанров компьютерных игр. В общем случае главгерой исследует локации, собирает предметы, находит/покупает/продаёт оружие и носимую броню, и самое главное - постоянно повышает свой уровень разными путями (прокачка в боях, покупка магии и т.д.). RPG-игры далеко не всегда созданы по фентезийным вселенным. Существует немало ролёвок в стиле киберпанк, стимпанк и др. Более подробно об этом жанре читай здесь: Жанры компьютерных игр.

В данном курсе:

  • В режиме "Шаг за шагом" мы рассмотрим все стадии программирования игры в жанре RPG. Пройдя весь курс до конца, ты обнаружишь, что им можно пользоваться в том числе как справочным пособием.
  • Создадим так называемый "каркас" (framework), который позднее может быть использован при создании других игр (в программировании это называется "рефакторинг"). В том числе других жанров. По ходу повествования каркас будет "обрастать" всевозможными "фишками".
  • Обязательно коснёмся теории стейтов (states), подробно расскажем об игровом конвейере (pipeline) и о менджменте ресурсов (модели, сцены, звуки и т.д.).
  • Научимся создавать (относительно) крутую игровую графику и т.н. движок битв (combat engine), внедрять поддержку статов главгероя и оснащать игру внутриигровыми предметами.

Игры жанра RPG - одни из самых трудных для создания. Настоящий хардкор в мире игрокодинга.

Язык программирования и API:

  • Язык программирования: С++.

В терминологии Microsoft мы будем создавать "неуправляемый" (unmanaged) код. Классическая версия языка для создания приложений под 32-битные версии операционных систем (далее "ОС") MS Windows XP/Vista/7/8. Также создаются и успешно работают под 64-битными (х64) версиями этих ОС в так называемом "режиме совместимости" (compatibility mode).

  • Графичесий API: MS DirectX 8 (8.1) образца 2001 года.

Почему именно он?

  • Это демократично.

3D-игры под DirectX8 легко идут как на компьютерах c Win XP/7 стоимостью до 1000 рублей, так и на ультрасовременных сборках/ноутбуках (при условии, что в Windows 10 включен Direct Play). В частности из-за того, что DirectX обладает обратной совместимостью. То есть игра под DirectX 8 легко стартанёт на компе с DirextX 10, 12 и более навороченными. Охват потенциальной аудитории поистине колоссальный. И не надо говорить, что сейчас уже у всех... В отдалённых от областных центров районах люди играют на самых разных компьютерах.

  • Практики (=наработки), полученные в данном курсе, пригодятся при создании игр и под более современные API.
  • Мне в руки попала книга Jim Adams. Programming Role Playing Games with DirectX 8.0. - Premier Press. 2001

Там много "воды", да и в качестве IDE применяется MS Visual C++ 6.0 образца 1998 года, которая вроде как платная и продаётся, но её (официально) нигде не купить. Кроме того, платные средства разработки не соответствуют концепции сайта igrocoder.ru. Мы верны своим принципам: для разработки игр в домашних условиях необходимы только компьютер (да, с платной ОС MS Windows) и доступ в Интернет. Остальное можно найти во всемирной паутине.
Поэтому будем экспериментировать с (более или менее) современной бесплатной IDE MS Visual C++ 2010 Express.

  • Создать хорошую игру под устаревший графический API с помощью абсолютно бесплатных программных средств - это мастерство.

Именно его мы и будем проявлять в данном курсе.

Закрыть
noteОбрати внимание

DirectPlay признан устаревшим компонентом и уже много лет не поддерживается Майкрософт. Его даже перестали включать в последние версии DirectX SDK. (Здесь придёт на помощь DirectX SDK 8.) Вместо DirectPlay Майкрософт предлагает... ничего! Вернее, предлагает использовать различные реализации сетевых протоколов от сторонних разработчиков.
Но и это ещё не всё. В ОС Microsoft Windows 10 компонент DirectPlay вообще отключен по умолчанию! Это является чуть-ли не единственной причиной, по которой многие игры, использующие его, просто не запускаются, выдавая сообщение об отсутствии библиотек DirectPlay. О том, как его всё-таки включить, есть отличный ролик на YouTube: https://www.youtube.com/watch?v=WrufOcVR_HU(external link)

MS DirectX распространяется в двух видах:

  • MS DirectX Runtime library (т.н. "библиотека времени выполнения"; необходима для запуска игр на ПК; включена по-умолчанию во все версии ОС MS Windows XP/Vista/7/8/10)
  • MS DirectX SDK (Software Development Kit, набор для разработки ПО; необходим для создания игр).

Мы будем использовать DirectX SDK версии 8, которую надо скачать и установить отдельно (об этом читай ниже).

Весь процесс создания игры делится на несколько основных компонентов, называемых "ядрами" (cores):1

  • System Core (Системное ядро)
  • Graphics Core (Графическое ядро)
  • Input Core (Ядро ввода)
  • Sound Core (Звуковое ядро)
  • Network Core (Сетевое ядро).

Мы будем рассматривать их по очереди, один за другим, одновременно вписывая их в созданный каркас (framework) игры.

В течение курса мы будем создавать игровой движок (от англ "engine" - двигатель, движок), который "физически" будет выглядеть как Проект в MS Visual C++, конечной целью которого станет компиляция статической LIB-библиотеки.

Закрыть
noteПримечание

Формат LIB является внутренним форматом MS Visual C++. Файлы .lib, как правило, применяются только внутри интегрированной среды программирования (ИСР, IDE). Обычно их вставляют ("подключают") в проект с исходным кодом исполняемого .exe-файла. Статические LIB-библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, подключенный из статической LIB-библиотеки, становится частью вашего приложения — для использования кода не нужно устанавливать еще какой-либо файл.

После своей компиляции LIB-библиотека будет добавлена в Проект игры, который позднее создадим в том же Решении (так, начиная c MS Visual Studio 2005, теперь зовётся рабочее пространство "workspace"), что и движок. Таким образом, одно Решение будет (в общем случае) содержать 2 Проекта:

  • Engine (Проект движка)
  • Game (Проект игры).

Это придаст исходному коду чёткую стркутуру, повысит читабельность, сделает его более инкапсулированным.
На основе разработанного движка, мы создадим игру (демо-версию игры), которая "физически" будет выглядеть как 1 файл приложения Windows с расширением .exe. В общем виде файловую структуру будущей игры можно представить так:

Исполняемый ("стартовый") файл игры (файл с расширением .exe) Является обычным приложением Win32. Содержит функционал игры (порядок загрузки ресурсов, смена стейтов, активация видеовставок и т.д.). Обычно на него указывает ярлык, размещаемый на Рабочем столе Windows.
Ресурсы игры Изображения (текстуры, заставки), звуки, модели, локации и т.д. Как правило, аккуратно разложены по папкам внутри каталога с игрой (maps, textures, sounds и т.д.)

Полученный после компиляции исполняемый файл игры, в принципе, автономен и без труда запустится на любом компьютере под управлением ОС Windows и установленным DirectX Runtime (при условии, что видеоадаптер поддерживает DirectX 8; Не надо смеяться: некоторые ноуты из Китая не поддерживают даже его!). Таким образом, получив от IDE исполняемый файл игры, про остальные библиотеки и заголовки можно забыть, бережно перенеся exe-шник и его ресурсы из каталога с Проектом в новый каталог (папку) на жёстком диске с названием игры. Именно эту папку ты затем заархивируешь, перенесёшь на флэшку и будешь с гордостью показывать своё творение на компьютерах друзей. (Собственно, для чего всё и затевалось.))

В начальных главах мы "пробежимся" по основам языка программирования C++ и затронем принципы объекто-ориентированного программировани вцелом. Курс составлен в том числе для новичков, но знать хотя бы азы программирования всё же очень желательно.

Вообще, программированием движка игры с чистого листа, как правило, никто не занимается, так как это самый долгий и трудоёмкий процесс. Для создания крупных коммерческих проектов обычно используют готовые игровые движки (Unreal Engine, Cry Engine, Ogre, Irrlicht и др.) или собственные наработки в данной области. Но чтобы как следует разобраться во всей этой игрокодинговой "кухне", необходимо начать всё буквально "с нуля". Также это нужно, чтобы чётко понимать, что где "лежит" и откуда взялось. Наша цель - чёткий, хорошо структурированный код, в котором его автор может, при необходимости, менять абсолютно всё, что посчитает нужным. Приготовьтесь к головокружительному путешествию в мир программирования 3D-графики. И запаситесь терпением: объём информации для запоминания будет просто огромным! Компьютерные игры - самые сложные программные приложения. Да и Microsoft DirectX является низкоуровневым API, а не игровым движком. Что также не делает жизнь игрокодера проще.

Нам потребуется:

ПК Intel x86-совместимый компьютер с установленной ОС MS Windows 7, 8. Под Win10 не тестилось, но в теории тоже всё должно работать. Компьютер должен без труда "крутить" 3D-приложения под DirectX 8, увидевшем свет ещё в 2001 году. Так что современные видеокарты без труда его "подхватят" (в DirectX заложена обратная совместимость версий; т.е. библиотеки DirectX10 и DirectX11 подойдут для запуска игр, созданных под DirectX8).
Microsoft Visual Studio 2010 Express Официально бесплатный (для некоммерческого использования) пакет из четырёх интегрированных сред разработки приложений (ИСР или IDE) от Microsoft. Включает в себя: Visual C# 2010 Express, Visual C++ 2010 Express, Visual Web Developer 2010 Express, Visual Basic.NET 2010 Express. Все IDE сильно заточены под разработку .NET приложений, но в Visual C++ можно также создавать классические win32 программы. На 15.01.2019 найти Microsoft Visual Studio 2010 Express на сайте самой Microsoft нереально. Берём здесь: http://allpcworld.com/download-visual-studio-2010-express-free/(external link). ISO-образ. 694 Мб. Формат ISO-образов изначально создавался для записи на CD/DVD-диски. Запиши образ с помощью встроенной в Windows программы записи дисков или сторонних программ (IMG Burning Rom, CDBurnerXP и др.). Классические ISO-образы легко открывались и извлекались с помощью архиватора WinRAR. Но в данном случае образ создан в стандарте UDF и WinRar не поможет. Если чистых дисков нет или не на чем записывать, помогут программы CD Daemon Tools (функционала бесплатной версии будет достаточно) или Alcohol 120% Free. Обе программы создают в системе виртуальный (программный) DVD-привод, позволяя "смонтировать" скачанный ISO-образ прямо с жёсткого диска, и пользоваться им как обычным DVD-диском, вставленным в виртуальный привод. Запускаем Проводник, щёлкаем по виртуальному приводу и запускаем программу установки из предварительно смонтированного ISO-образа (setup.exe). Во время первого запуска любой IDE из состава MSVS она запросит регистрационный ключ, который теоретически можно получить, бесплатно зарегистрировавшись на сайте Microsoft. Но на практике ссылка на ключ в самой MS Visual Studio 2010 уже сейчас (04.07.2015) не работает, а на сайте Microsoft сам чёрт ногу сломит. Так что вводим эти ключи: VC# 2010 Express: PQT8W-68YB2-MPY6C-9JV9X-42WJV VC++ 2010 Express: 6VPJ7-H3CXH-HBTPT-X4T74-3YVY7 VWD 2010 Express: CY8XP-83P66-WCF9D-G3P42-K2VG3 VB.NET 2010 Express: 2KQT8-HV27P-GTTV9-2WBVV-M7X96
Microsoft Windows SDK for Windows 7 and .NET Framework 4 Ставится автоматом вместе с MS Visual C++ 2010. Набор необходимых заголовков, библиотек, документации и утилит для создания приложений под ОС Windows 7. Существуют SDK и для других ОС Windows. На него, в частности, опирается MS Visual Studio при разработке приложений в том числе под DirectX. Поэтому данная версия Microsoft Windows SDK идёт в наборе с MS Visual Studio 2010. Содержит в себе такие важные заголовки, как windows.h, windowsx.h, winnt.h. Без них большинство примеров DirectX SDK 8 просто не станут компилироваться. Берём здесь: https://www.microsoft.com/en-us/download/details.aspx?id=8279(external link). Объём прибл. 3 Мб (веб-инсталлятор).
Microsoft DirectX SDK 8.1 Набор библиотек для разработки приложений под DirectX 8. Восьмой SDK всё ещё можно найти в гугле по запросу DX81SDK_FULL.EXE. Вышел в свет в 2001 г. До сих пор активно применяется разработчиками инди-игр и специализированных приложений. Кладезь информации по программированию графики средствами DirectX посредством неуправляемого (unmanaged, т.е. на чистом C++ без .NET-фреймворка) кода. Берём здесь: http://old-dos.ru/index.php?page=files&mode=files&do=show&id=2629(external link). Объём прибл. 164 Мб. Скачанный архив распаковываем в любую папку на жёстком диске и запускаем Setup.exe.
GUIDGEN Генератор GUID-идентификаторов. Раньше шёл в наборе с MS Visual C++ 6.0. В современных версиях MS Visual C++ Express его нет. Берём здесь: GUIDGEN(external link), либо пользуемся онлайн-сервисами вроде https://www.guidgen.com(external link).

Напомним, что из всего набора MS Visual Studio 2010 нам нужна только MS Visual C++ 2010. При желании её нетрудно найти в Интернете в виде отдельного приложения.

Содержание курса:

Источники:


1. Jim Adams. Programming Role Playing Games with DirectX 8.0. - Premier Press. 2002

Contributors to this page: slymentat .
Последнее изменение страницы Понедельник 27 / Апрель, 2020 22:59:08 MSK автор slymentat.

Помочь проекту

Яндекс-деньги: 410011791055108