Программирование игр

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Программирование игр — часть процесса разработки компьютерных игр (видеоигр). Программирование игр требует[источник не указан 2315 дней] специализации в одной или нескольких из следующих областей, которые в значительной степени присутствуют в создании игр: симуляция, компьютерная графика, искусственный интеллект, физика, звук и ввод данных[источник не указан 2315 дней]. Для многопользовательских онлайн-игр часто[насколько?] необходимы дополнительные знания, такие как сетевое программирование и программирование баз данных[источник не указан 2315 дней].

Этапы программирования

[править | править код]

Прототипирование

[править | править код]

Прототипирование игр — процесс реализации базового функционала для чернового варианта. Обязательность прототипирования обусловлена необходимостью анализа системы в целом. Для игровой индустрии прототипом называется демоверсия с базовым функционалом (набор ключевых особенностей игры). Сколько базовых особенностей будет включено в демоверсию решается возможностями бюджета и важностью этих вещей в игровом процессе.

Геймдизайн

[править | править код]

Хотя основная задача программиста не состоит в том, чтобы разрабатывать дизайн игры, они часто вносят свой вклад наравне с разработчиками игр. Разработчик игры будет запрашивать мнение как производителя, так и руководства по искусству и программированию для идей и стратегий дизайна игры. Часто люди, не занимающие руководящие должности, также вносят свой вклад, такие как копирайтеры и художники. Программисты часто внимательно следят за документацией по дизайну игры. По мере развития игры меняется дизайн-документ по мере того, как обнаруживаются новые возможности программирования, а также новые ограничения.

Производство

[править | править код]

В процессе производства программисты могут создавать большое количество исходного кода для создания игры, описанной в дизайн-документе. Попутно проектный документ изменяется с учётом ограничений или расширяется для использования новых функций. Дизайн-документ является в значительной степени «живым документом», большая часть жизни которого продиктована графиком программиста, талантом и находчивостью. В то время как многие программисты высказывают своё мнение о содержании игры, большинство производителей игр запрашивают у ведущего программиста информацию о статусе разработки игрового программирования. Ведущий отвечает за знание статуса всех аспектов программирования игры и за указание ограничений. Ведущий программист может также передать предложения программистов относительно возможных функций, которые они хотели бы реализовать. С сегодняшним визуально богатым контентом программист должен часто взаимодействовать с художественным персоналом. Конечно, это очень сильно зависит от его роли. Например, программисту трёхмерной графики, возможно, придётся работать бок о бок с разработчиками 3D-моделей игры, обсуждая стратегии и соображения дизайна, в то время как программисту ИИ может вообще не понадобиться взаимодействовать с арт-персоналом. Чтобы помочь художникам и дизайнерам уровней в выполнении их задач, программисты могут стать волонтёрами или быть привлечены для разработки инструментов и утилит. Многие из них могут быть для определённой цели и могут содержать ошибки из-за нехватки времени (время на разработку таких инструментов часто не входит в расписание игры), а также потому, что они все равно предназначены только для внутреннего использования. Многие игровые инструменты разработаны на языках RAD[1] для более быстрой разработки и могут быть отброшены после завершения игры.

Тестирование

[править | править код]

Формальный процесс проверки качества, выполняемый профессиональными тестировщиками игр, начинается с разработки игр. Высокобюджетные игры могут начать тестирование с первой играемой альфы, в то время как малобюджетные и казуальные игры могут не пройти тестирование, пока не будет готов кандидат на релиз. Задача программистов состоит в том, чтобы исправить ошибки и ошибки, как таковые, обнаруженные командами QA.

«Почти» готовность

[править | править код]

Заключительные задачи включают в себя «полировку» игры, например, программисты, исправляющие случайные ошибки — от незначительных до катастрофических — которые могут возникнуть на последних этапах тестирования.

У разработчиков игр может быть период бета-тестирования, но их определение варьируется от разработчика к разработчику. Часто бета-версия содержит все функции игры, но может содержать несколько ошибок или неполное содержание. Немногим играм предоставляется публичная бета-версия, например, для измерения стрессоустойчивости игровых серверов.

Когда игра считается завершённой, говорят, что она «перешла в золото» и отправляется издателю. В зависимости от обстоятельств издатель может затем подвергнуть его собственной проверке качества.

Как только игра выйдет, начнётся этап обслуживания видеоигры. Программисты ждут какое-то время, чтобы получить как можно больше сообщений об ошибках. Как только разработчик считает, что получил достаточно отзывов, программисты начинают работать над патчем. Разработка патча может занять недели или месяцы, но он предназначен для исправления множества ошибок и проблем с игрой. Иногда патч может включать в себя дополнительные функции или контент или даже может изменить игровой процесс.

Время разработки

[править | править код]

Время разработки большинства современных игр занимает от года до трёх лет. Продолжительность разработки зависит от ряда факторов, но программирование требуется на всех этапах разработки, кроме самых ранних этапов разработки игры.

Инструментарий

[править | править код]

Как и другое программное обеспечение, программы разработки игр генерируются компилятором из исходного кода в реальную программу (называемую исполняемым файлом). Исходный код может быть разработан практически с любым текстовым редактором, но многие профессиональные программисты игр используют полностью интегрированную среду разработки. Ещё раз, какая IDE используется, зависит от целевой платформы.

В дополнение к IDE многие компании-разработчики игр создают собственные инструменты, разработанные для собственного использования. Некоторые из них включают в себя прототипы и инструменты преобразования активов (программы, которые изменяют иллюстрацию, например, в пользовательский формат игры). Некоторые пользовательские инструменты могут даже поставляться с игрой, такие как редактор уровней.

Компании-разработчики игр часто очень охотно тратят тысячи долларов, чтобы убедиться, что их программисты хорошо оснащены лучшими инструментами. Хорошо укомплектованный программист может иметь две-три системы разработки и несколько мониторов, доминирующих в их офисе или кабинете.

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

[править | править код]

Как только первоначальный дизайн игры был согласован, необходимо выбрать язык разработки. Выбор зависит от многих факторов, таких как знание языка программистами, целевые платформы, требования к скорости выполнения и язык любых используемых игровых движков, API или библиотек.

Для персональных компьютеров выбранный язык может быть чуть более предпочтительным. Языковые привязки для популярных библиотек, таких как SDL и Allegro, широко распространены, а разрыв в производительности между идиоматическим кодом, написанным на современных скомпилированных языках, незначителен. Самые популярные языки обычно являются процедурными / объектно-ориентированными и реализуются через компиляторы; например, C, C++, и Java. Тем не менее, разработчики могут принимать во внимание специфичные для предмета функции, такие как взаимодействие с операционной системой и устойчивость к обратному инжинирингу для онлайн-видеоигр. Многие игры не написаны исключительно на одном языке и могут сочетать два или более языков; Например, Unity, популярный игровой движок, имеет разные части, написанные на C, C++ и C#.

Для консолей поддержка целевой платформы обычно является наиболее важным фактором. В прошлом видеоигры для консолей были написаны почти исключительно в сборке из-за ограниченных ресурсов с точки зрения как хранения, так и скорости обработки. [9] Однако по мере развития технологий появляются и варианты разработки игр на консолях. Nintendo, Microsoft и Sony имеют разные SDK для своих консолей Wii U, Nintendo Switch, Xbox One и PlayStation 4 соответственно.

Языки сценариев высокого уровня все чаще используются в качестве встроенных расширений основной игры, написанной на скомпилированном языке программирования, для удобства как первоначального разработчика, так и любого, кто захочет изменить игру. Lua — очень популярный выбор, поскольку его API написан на ANSI C, а язык предназначен для встраивания в другие приложения. Многие разработчики создали собственные языки для своих игр, такие как QuakeC от id Software и UnrealScript от Epic Games.

API и библиотеки

[править | править код]

Ключевое решение в игровом программировании — какие API и библиотеки использовать, если таковые имеются. Сегодня доступно множество библиотек, которые решают ключевые задачи программирования игр. Некоторые библиотеки могут обрабатывать звук, вводить и визуализировать графику. Некоторые могут даже выполнять некоторые задачи AI, такие как поиск пути. Есть даже целые игровые движки, которые решают большинство задач игрового программирования и требуют только кодирования игровой логики.

Какой API и библиотеки выбрать, во многом зависит от целевой платформы. Например, библиотеки для разработки на PlayStation 2 могут быть недоступны для Microsoft Windows и наоборот. Однако существуют игровые платформы, которые позволяют или облегчают кроссплатформенную разработку, поэтому программисты могут программировать игру на одном языке и запускать игру на нескольких платформах, таких как Wii, PlayStation 3, Xbox 360, PSP и Microsoft Windows.

Графические API

[править | править код]

Сегодня графика является ключевым определяющим признаком большинства игр. В то время как 2D-графика была нормой для игр, выпущенных до середины 1990-х годов, большинство игр AAA теперь имеют полноценную 3D-графику, даже для игр, которые в основном 2D-характера, таких как Civilization III. Тем не менее, чисто 2D-графика пережила ренессанс с инди-играми.

Хорошо зарекомендовавшая себя платформа персональных компьютеров — Microsoft Windows. Поскольку он был предустановлен почти на девяносто процентов проданных ПК, сейчас у него самая большая пользовательская база. Требуется два наиболее популярных API-интерфейса для 3D-графики для Microsoft Windows — Direct3D и OpenGL. Преимущества и недостатки каждого API горячо обсуждаются среди разработчиков игр для Windows.

В настоящее время самой популярной вычислительной платформой является Google Android. Поскольку он уже установлен на почти восьмидесяти процентах проданных смартфонов, Android занимает вторую по величине базу пользователей и продолжает расти. Android использует OpenGL ES & Vulkan (API).

DirectX — это набор игровых API. Direct3D — это 3D API DirectX. Direct3D бесплатно доступен от Microsoft, как и остальные API DirectX. Microsoft разработала DirectX для программистов игр и продолжает добавлять функции в API. Спецификация DirectX не контролируется открытым арбитражным комитетом, и Microsoft может свободно добавлять, удалять или изменять функции. Direct3D не является переносимым; он разработан специально для Microsoft Windows и никакой другой платформы (хотя форма Direct3D используется на смартфонах Microsoft Xbox, Windows Phone 7.5 и мобильных устройствах, работающих под управлением операционной системы Pocket PC).

OpenGL — это портативная спецификация API. Код, написанный на OpenGL, легко переносится между платформами с совместимой реализацией. Например, Quake II, использующий OpenGL, был перенесён с Windows на Linux фанатом игры. OpenGL — это стандарт, поддерживаемый Комитетом по рассмотрению архитектуры OpenGL (ARB). ARB периодически собирается, чтобы обновить стандарт, добавив новую поддержку функций новейшего 3D-оборудования. Так как он основан на стандартах и был самым длинным, OpenGL используется и преподаётся в колледжах и университетах по всему миру. Требуется также инструменты разработки, предоставляемые производителями некоторых игровых консолей (таких как Nintendo). GameCube, Nintendo DS и PSP) используют графические API, которые напоминают OpenGL. OpenGL часто отстаёт в обновлении функций из-за отсутствия постоянной команды разработчиков и требования, чтобы реализации начинали разработку после публикации стандарта. Программисты, которые решили использовать его, могут получить доступ к последним аппаратным 3D-функциям некоторых аппаратных средств, но только через не стандартизированные расширения. Ситуация может измениться в будущем, когда совет по рассмотрению архитектуры OpenGL (ARB) передал контроль над спецификацией группе Khronos в попытке противостоять этой проблеме.

Для разработки под Microsoft Windows различные API-интерфейсы DirectX могут использоваться для ввода, звуковых эффектов, музыки, работы в сети и воспроизведения видео. Многие коммерческие библиотеки доступны для выполнения этих задач, но поскольку DirectX доступен бесплатно, он используется наиболее широко.

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

Примечания

[править | править код]
  1. Rapid Application Development – Быстрая разработка приложений. www.informicus.ru. Дата обращения: 9 ноября 2019. Архивировано 10 ноября 2019 года.
  • igda.org (англ.) — официальный сайт International Game Developers Association (IGDA)
  • GameDev.net: Home (англ.). GameDev.net. — Ведущий ресурс для разработчиков игр. Дата обращения: 19 июля 2018.
  • Devmaster - game development news, articles, database, forums & more (англ.). DevMaster.net. — Популярный сайт для разработчиков игр. Дата обращения: 19 июля 2018. Архивировано из оригинала 5 декабря 2012 года.
  • Game Development for Software Engineers Courses (англ.). MIT. — 5-дневные курсы программирования игр под руководством наставников удостоенных наград MIT Game Lab. Дата обращения: 19 июля 2018.
  • Game Programmer (англ.). KonaEarth.com (30 апреля 2006). — Опыт одного из экс-программистов в индустрии разработки игр. Дата обращения: 19 июля 2018.
  • Tom Sloper and Marc Vaughan. Lesson #15: Game programming (англ.). Sloperama Productions. — Советы ветерана игровой индустрии Тома Слопера по программированию игр. Дата обращения: 19 июля 2018.