Введение
Программирование игр – подмножество разработки игр – это разработка программного обеспечения для видеоигр. Программирование игр требует значительных навыков в области разработки программного обеспечения и компьютерного программирования на определенном языке, а также специализации в одной или нескольких из следующих областей: моделирование, компьютерная графика, искусственный интеллект, физика, аудиопрограммирование и обработка ввода. Для многопользовательских игр необходимы знания сетевого программирования (результирующий код, помимо своих характеристик производительности, обычно называют сетевым кодом игры как игроками, так и программистами). В некоторых жанрах, например, в файтингах, часто требуются продвинутые навыки сетевого программирования, поскольку сетевой код и его свойства (например, задержка) игроки и критики считают одними из важнейших показателей качества игры. Для массовых многопользовательских онлайн-игр (MMOG) требуются еще более глубокие знания программирования баз данных и продвинутого сетевого программирования. Хотя этим часто занимаются профессиональные программисты, существует активное сообщество независимых разработчиков, не связанных с издателями.
programming video games
Game programming, a subset of game development, is the software development of video games. Game programming requires substantial skill in software engineering and computer programming in a given language, as well as specialization in one or more of the following areas: simulation, computer graphics, artificial intelligence, physics, audio programming, and input. For multiplayer games, knowledge of network programming is required (the resultant code, in addition to its performance characteristics, is commonly referred to as the game's netcode by players and programmers alike). In some genres, e. g. fighting games, advanced network programming is often demanded, as the netcode and its properties (e. g. latency) are considered by players and critics to be some of the most important metrics of the game's quality. For massively multiplayer online games (MMOGs), even further knowledge of database programming and advanced networking programming are required. Though often engaged in by professional game programmers, there is a thriving scene of independent developers who lack a relationship with a publishing company.
Процесс разработки
Профессиональная разработка игр обычно начинается с игрового дизайна, который может иметь различные источники. Иногда процесс разработки игры начинается не с четкого дизайна, а с серии экспериментов. Например, игровой дизайнер Уилл Райт начал разработку The Sims, предложив программистам поэкспериментировать с несколькими идеями.
Прототипирование
Программисты часто должны создавать прототипы игровых идей и механик. Значительная часть прототипирования происходит на этапе предварительного производства, до завершения дизайн-документа, и может помочь определить, какие функции будут включены в финальный дизайн. Прототипы разрабатываются быстро, с минимальным временем на предварительное проектирование, и служат в основном для проверки концепции или тестирования идей. От них не требуется безупречной работы, но они создаются для экспериментов с новыми, порой нестандартными идеями.
Дизайн игры
Хотя основная задача программиста — не разработка дизайна игры, программисты часто вносят в него свой вклад, как и художники. Дизайнер игры запрашивает идеи и стратегии для дизайна у продюсера, ведущего художника и ведущего программиста. Часто свой вклад вносят и сотрудники, не занимающие руководящие должности, например, копирайтеры, другие программисты и художники. Программисты обычно внимательно следуют документу с дизайном игры. В процессе разработки игры этот документ меняется по мере выявления и использования ограничений программирования и новых возможностей.
Производство
Во время производства программисты могут создавать значительный объем исходного кода для реализации игры, описанной в дизайн-документе. В процессе разработки дизайн-документ может изменяться с учетом ограничений или расширяться для использования новых возможностей. Дизайн-документ – это своего рода "живой документ", жизненный цикл которого во многом определяется графиками работы, квалификацией и изобретательностью программистов. Хотя многие программисты могут высказывать свое мнение относительно содержания игры, большинство продюсеров запрашивают информацию о ходе разработки у ведущего программиста. Ведущий программист отвечает за знание статуса всех аспектов программирования игры и выявление ограничений. Он также может передавать предложения от программистов относительно возможных функций, которые они хотели бы реализовать. В современных играх с насыщенным визуальным контентом программистам часто приходится взаимодействовать с художниками. Это во многом зависит от роли программиста. Например, программисту 3D-графики может потребоваться тесно сотрудничать с 3D-моделлерами, обсуждая стратегии и дизайнерские решения, в то время как программисту искусственного интеллекта взаимодействие с художниками может быть минимальным или вовсе отсутствовать. Чтобы помочь художникам и дизайнерам уровней, программисты могут добровольно или по запросу разрабатывать инструменты и утилиты. Многие из них создаются для решения конкретных задач и могут содержать ошибки из-за нехватки времени (время на разработку таких инструментов часто не учитывается в графике проекта), а также потому, что предназначены исключительно для внутреннего использования. Многие игровые инструменты разрабатываются на языках RAD для ускорения разработки и могут быть отброшены после завершения проекта.
Испытания
Формальный процесс обеспечения качества, выполняемый профессиональными игровыми тестировщиками, начинается на значительном этапе разработки игры. Высокобюджетные проекты могут начать тестирование с первой играбельной альфа-версии, в то время как низкобюджетные и казуальные игры могут не поступать на тестирование до готовности релиз-кандидата. Задача программистов — исправлять ошибки и дефекты, обнаруженные командами QA.
Почти завершена
Последние задачи включают в себя "полировку" игры, например, исправление программистами случайных ошибок – от незначительных до критических – которые могут возникать на последних этапах тестирования. Разработчики игр могут проводить период бета-тестирования, но его определение варьируется от разработчика к разработчику. Часто бета-версия содержит все функции игры, но может содержать несколько ошибок или неполный контент. Публичный период бета-тестирования предоставляется лишь немногим играм, например, для измерения устойчивости игровых серверов к нагрузкам. Когда игра признается завершенной, говорят, что она "стала золотой" и отправляется издателю. В зависимости от обстоятельств, издатель может затем провести собственную проверку качества или приступить к тиражированию игры с золотого мастера.
Содержание
Как только игра выпущена, начинается этап поддержки видеоигры. Программисты ждут определенный период времени, чтобы собрать как можно больше отчетов об ошибках. Когда разработчик считает, что получил достаточно обратной связи, программисты приступают к работе над патчем. Разработка патча может занять недели или месяцы, но он предназначен для исправления большинства ошибок и проблем в игре. Иногда патч может включать в себя дополнительные функции или контент, а также может даже изменять игровой процесс.
Продолжительность
Большинство современных игр занимают от одного до трех лет на разработку. Продолжительность разработки зависит от множества факторов, но программирование необходимо на протяжении всех этапов разработки, за исключением самых начальных стадий проектирования игры.
Инструменты
Как и другое программное обеспечение, программы для разработки игр генерируются компилятором из исходного кода в исполняемый файл. Исходный код можно разрабатывать практически в любом текстовом редакторе, но многие профессиональные игровые программисты используют полноценную интегрированную среду разработки (IDE). Выбор IDE, в очередной раз, зависит от целевой платформы. Помимо IDE, многие компании, занимающиеся разработкой игр, создают собственные инструменты, предназначенные для внутреннего использования. К ним могут относиться прототипы и инструменты для конвертации ресурсов (программы, которые, например, преобразуют графику в пользовательский формат игры). Некоторые собственные инструменты могут даже поставляться вместе с игрой, например, редактор уровней. Компании, разрабатывающие игры, часто готовы тратить тысячи долларов, чтобы обеспечить своих программистов лучшими инструментами. Хорошо оснащенный программист может иметь два-три рабочих места для разработки и несколько мониторов, занимающих большую часть его офиса или рабочего места.
Языки программирования
Языковые особенности Ассемблер Потенциально минимальная нагрузка на процессор C Широко известный, широко переносимый, множество API, компилируется в машинный код C++ Объектно-ориентированный, широко известный, множество API, компилируется в машинный код Java Объектно-ориентированный, сборщик мусора, широко переносимый (через виртуальную машину) C#, Visual Basic NET и др. Объектно-ориентированный, сборщик мусора, взаимодействие с продуктами Microsoft Objective C, Swift Объектно-ориентированные, взаимодействие с продуктами Apple Lua, Python, JavaScript, Tcl и др. Знакомый синтаксис, легко встраивается в вышеуказанные языки, часто используется для написания скриптов Lisp, Pascal, Perl, Smalltalk и др. Нишевые игровые языки, хотя привязки к популярным библиотекам распространены. После согласования первоначального дизайна игры необходимо определиться с языком разработки. Выбор зависит от множества факторов, таких как знание языка программистами, целевые платформы, требования к скорости выполнения и язык используемых игровых движков, API или библиотек. Для персональных компьютеров выбор языка зачастую является лишь вопросом предпочтений. Привязки языков для популярных библиотек, таких как SDL и Allegro, широко распространены, а разница в производительности между идиоматичным кодом, написанным на современных компилируемых языках, незначительна. Наиболее популярные языки обычно процедурные или объектно-ориентированные и реализуются через компиляторы; например, C и Java. Однако разработчики могут учитывать специфические особенности предметной области, такие как взаимодействие с операционной системой и устойчивость к реверс-инжинирингу для онлайн-видеоигр. Многие игры не написаны исключительно на одном языке и могут сочетать два или более языков; например, Unity, популярный игровой движок, имеет различные компоненты, написанные на C, C++ и C#. Для консолей поддержка целевой платформы обычно является наиболее важным фактором. В прошлом видеоигры для консолей почти исключительно писались на ассемблере из-за ограниченных ресурсов в плане как хранения, так и скорости обработки. Однако с развитием технологий расширились и возможности разработки игр для консолей. Nintendo, Microsoft и Sony имеют различные SDK для своих консолей Wii U, Nintendo Switch, Xbox One и PlayStation 4 соответственно. Языки скриптов высокого уровня все чаще используются в качестве встроенных расширений к основной игре, написанной на компилируемом языке программирования, для удобства как оригинального разработчика, так и тех, кто захочет модифицировать игру. Lua – очень популярный выбор, поскольку его API написан на ANSI C, а язык предназначен для встраивания в другие приложения. Многие разработчики создавали собственные языки для своих игр, такие как QuakeC от id Software и UnrealScript от Epic Games.
Once the game's initial design has been agreed upon, the development language must be decided upon. The choice depends upon many factors, such as language familiarity of the programming staff, target platforms, the execution speed requirements and the language of any game engines, APIs or libraries being used. For personal computers, the language selected may be little more than a matter of preference. Language bindings for popular libraries such as SDL and Allegro are widespread, and the performance gap between idiomatic code written in modern compiled languages is negligible. The most popular languages are usually procedural or object oriented and implemented via compilers; for example, C, and Java. However, developers may take into account domain specific features, such as interfacing with the operating system, and resilience to reverse engineering for online video games. Many games are not written in one language exclusively, and may combine two or more languages; For example, Unity, a popular game engine, has different pieces written in C, C++, and C#. For consoles, the support of the target platform is usually the most considered factor. In the past, video games for consoles were written almost exclusively in assembly due to limited resources in terms of both storage and processing speed. However, as technology has advanced, so have the options for game development on consoles. Nintendo, Microsoft, and Sony all have differing SDKs for their Wii U, Nintendo Switch, Xbox One, and PlayStation 4 consoles, respectively. High level scripting languages are increasingly being used as embedded extensions to the underlying game written in a compiled programming language, for the convenience of both the original developer and anyone who would wish to mod the game. Lua is a very popular choice, as its API is written in ANSI C and the language is designed to be embedded into other applications. Many developers have created custom languages altogether for their games, such as id Software's QuakeC and Epic Games' UnrealScript.
API и библиотеки
Ключевое решение в программировании игр — выбор API и библиотек, если они необходимы. Сегодня существует множество библиотек, которые берут на себя основные задачи игрового программирования. Некоторые библиотеки могут обрабатывать звук, ввод данных и графическую отрисовку. Некоторые даже могут выполнять отдельные задачи искусственного интеллекта, например, поиск пути. Существуют даже целые игровые движки, которые выполняют большинство задач игрового программирования и требуют лишь написания игровой логики. Выбор API и библиотек во многом зависит от целевой платформы. Например, библиотеки для разработки под PlayStation 2 могут быть недоступны для Microsoft Windows и наоборот. Однако существуют игровые фреймворки, которые позволяют или упрощают кроссплатформенную разработку, благодаря чему программисты могут создавать игру на одном языке и запускать её на различных платформах, таких как Wii, PlayStation 3, Xbox 360, PSP и Microsoft Windows.
Другие АПИ
Для разработки под Microsoft Windows различные API DirectX могут использоваться для обработки ввода, звуковых эффектов, музыки, сетевого взаимодействия и воспроизведения видео. Существует множество коммерческих библиотек для решения этих задач, но поскольку DirectX доступен бесплатно, он является наиболее распространенным выбором. Для разработки под консоли производители консолей предоставляют инструменты для рендеринга графики и выполнения других задач, связанных с разработкой игр. Производители консолей также предоставляют полные комплекты разработки, без которых нельзя легально разрабатывать или выпускать игры для их платформы. Независимые разработчики также продают наборы инструментов или библиотеки, упрощающие разработку в одной или нескольких из этих областей, или предлагающие дополнительные возможности, такие как поддержка кросс-платформенной разработки.
Любители
Единственные платформы, широко доступные для любительского программирования, – это потребительские операционные системы, такие как Android, iOS, Windows, Mac, Linux и другие. Это связано с тем, что разработка для игровых консолей требует специальных систем разработки, стоимость которых исчисляется тысячами долларов. Как правило, их необходимо получать непосредственно от производителя консоли, и они продаются или сдаются в аренду только профессиональным игровым студиям. Однако Microsoft ранее распространяла платформу разработки игр XNA, которая работала как на Microsoft Windows, так и на Xbox 360. Поддержка XNA была прекращена, но другие проекты, такие как MonoGame и SharpDX, стремятся обеспечить аналогичный доступ к разработке игр. В последнее время Android является наиболее популярной платформой для мобильных разработчиков-любителей. Некоторые любители также разрабатывают неофициальные игры, особенно для портативных систем или модифицированных консолей. Некоторые студенты, изучающие программирование, создают игры в качестве упражнений для освоения языка программирования или операционной системы. Некоторые любители могут использовать программные пакеты, облегчающие разработку игр, такие как Adobe Animate, Unity, Android Studio, pygame, Adventure Game Studio, Roblox Studio, GameMaker Studio, Godot, Unreal Engine, Pixel Game Maker MV или Construct.