Романтика GameDev'а

Каждый молодой человек (имеются в виду существа обоих полов, хотя это словосочетание обычно применяется только к мужскому), интересующийся программированием, рано или поздно задумывается о том, чтобы написать собственную компьютерную игру. У большинства это, к сожалению или к счастью, дальше благих намерений не идёт. Но, конечно, находятся и те, кто доводит задуманное если не до конца, то хотя бы до начала. Однако разработка игр - дело, мягко говоря, не самое простое, поэтому я сейчас хотел бы сказать пару слов о нём тем, кто хочет сделать самостоятельно первую в жизни компьютерную игру.

Во-первых, игры бывают разные (мудрое замечание, хоть и банальное). Одно дело - это какие-нибудь стратегии, action'ы, RPG или квесты с навороченной графикой, и совсем другое - пасьянсы. Поэтому сначала нужно определиться, какую игру вы хотите разработать. Понятно, что молодым горячим парням и девушкам хочется сразу с места в карьер сделать что-то такое, чтобы и Doom 3, и Quake 4 дружно курили в сторонке. Поэтому давайте выделим классы игр (с точки зрения разработчика, а не с точки зрения игрока).

Первый класс, самый притягательный и один из самых сложных - игры с быстрой графикой. Соответственно, второй класс - игры с медленной графикой. Есть, правда, некоторые игрушки, которые не вписываются ни в один из классов, но о них мы потом ещё поговорим. Дальше идёт классификация по "мозгам": то есть, игры с искусственным интеллектом и без него. Хочу заметить, что ИИ может быть не только у юнитов в стратегиях и экшенах, но даже и в шахматах. Вообще шахматы - это такая интересная игра, в которой можно реализовать и быструю графику. Следующее деление (оно, конечно, слегка притянуто сюда за уши, но, в общем и целом, можно ввести и такую классификацию) - это игры многопользовательские и однопользовательские. Последних, сами понимаете, гораздо меньше в силу того, что человек - существо, как ни крути, общественное (некоторые говорят, что стадное, но это, в общем-то, практически одно и то же). Правда, однопользовательские игры представлены теперь значительным количеством flash-игр, которые сложно классифицировать по графике. Поэтому о flash-играх лучше говорить как о вообще отдельном классе компьютерных игр. Как и об онлайновых играх.

Сами понимаете, что по сложности разработки любой класс "с" выше, чем класс "без". Таким образом, самый сложный случай - игра с быстрой графикой, искусственным интеллектом и при этом многопользовательская. То есть, именно такая, какими является большинство популярных игр. Самый простой случай - напротив, игра без быстрой графики, без ИИ и однопользовательская. Например, "Сапёр" или пасьянсы.

Вот тут и возникает проблема. "Сапёра" писать скучно - ещё скучнее, чем в него играть. И, кроме того, разработка игр без ИИ не даёт никакого опыта в разработке собственно ИИ, то же самое относится и к быстрой графике. Поэтому здесь нужно сделать очень важный, поворотный выбор: что вам важнее - разработать конечный программный продукт или научиться работать с технологиями, применяющимися в современном GameDev'е. То есть, обычный жизненный выбор, что важнее лично вам: победа или участие. И дальше, исходя из этого выбора, думать, что разрабатывать и как.

 

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

Конечно, для того, кто хочет удивить всех готовым продуктом, лучшим выходом будет создание flash-игры. Фактически, всю графику Flash берёт на себя. И хотя она не будет трёхмерной, не будет шейдеров и прочей красоты, она будет смотреться красиво и вызывать уважение. Если, конечно, вы - хороший дизайнер. Если же нет, то лучше найти кого-нибудь, кто дружит с Corel'ом или Photoshop'ом. Потому что мультимедийная составляющая в любой игре - самая важная. У вас может быть гениальный по скорости движок с очень хорошо проработанной физикой, но если текстуры на модели наложены неровно, а сами модели вырублены топором и не обработаны даже рубанком, то ни один игрок за вашим творением и двух минут не усидит.

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

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

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

Джоэл Спольски вообще на эту тему говорил, что лучше не пользоваться даже DirectX'ом, а написать собственный движок рендеринга, потому что DirectX используется во всех играх и его характерные особенности всем давно известны. Но следовать этому совету вряд ли стоит (разве что можно вместо DirectX воспользоваться OpenGL и SDL), потому что на DirectX ориентируются производители видео- и аудиокарт, для него создаются специальные игровые устройства (джойстики, рули и т.д. и т.п.). Если писать свою систему наподобие DirectX, то о совместимости с "железом" придётся заботиться самостоятельно.

Если же вы решили, что пользоваться чужими движками зазорно, и нужно писать свой, то нужно определиться, что использовать - DirectX или же альтернативные библиотеки. Дело в том, что DirectX отвечает не только за графику, но и за звук, за сетевые возможности игры и за некоторые другие моменты. Аналог DirectX - это SDL, Simple DirectMedia Layer. SDL - библиотека кросс-платформенная и полностью открытая, но при этом менее распространённая под Windows, нежели DirectX. Сложно сказать, какая библиотека лучше, но если вы не планируете писать кросс-платформенную игру, то лучше использовать DirectX, потому что большая часть литературы, средств разработки и форумов игроделов ориентирована именно на детище корпорации Microsoft.

Если будете писать свой движок, забудьте слова Visual Basic и Delphi. Хотя большая часть тех, кто планирует писать свою игру, работают именно с этими языками, но они для написания игр всё же не предназначены. Логические игры, шахматы и пинбол можно написать и на VB, но для более-менее серьёзной графики VB, C#, Delphi не очень подходят. Да, для VB.NET и C# есть Manged DirectX, но серьёзных разработок для программ и игр с быстрой графикой на основе .NET я пока не видел.

Для написания игр используется C++ и Assembler. Да, есть множество книг "DirectX и Delphi" и т.п., но Delphi можно использовать разве что для компоновки движка графического и движка ИИ. Можно ещё на Delphi сделать редактор уровней для игры, тоже будет неплохо. Но дело в том, что компилятор Delphi на сегодняшний момент недостаточно хорош для того, чтобы делать с его помощью игры. В них очень важна скорость работы кода, а большая часть компиляторов C++ (Visual C++, Intel C++ Compiler) генерирует код более быстрый, нежели тот, что создаётся компилятором Delphi.

Ну и последний на сегодня совет тем, кто хочет написать игру с ИИ и быстрой графикой. Он прост: учите математику. Без хороших знаний высшей математики (особенно геометрии) сложно написать хороший графический движок.

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

Вадим СТАНКЕВИЧ

Версия для печатиВерсия для печати

Номер: 

17 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!