Игровая нирвана. Delphi и программирование компьютерных игр
С этого номера мы начинаем публикацию серии статей по... программированию. Предвижу ваши гневные возгласы и ссылки на то, что журнал-де игровой. Вот именно, игровой, а, следовательно, кодингом (на высшем языке — программированием) мы будем заниматься исключительно применительно к играм. Не бойтесь, ничего страшного в этом нет. На самом деле программирование — очень интересный процесс сам по себе, а в сочетании с играми может доставить реальное удовольствие и пользу. Элементарные навыки программирования нужны любому геймеру. Зачем? Ну, во-первых, мы уже довольно много внимания уделили созданию собственных игр. Но дизайн, графика, музыка, сюжет — периферийные вещи. А как собрать их вместе, сделать единым целым, получить на выходе не набор тайтлов и скетчей, а Игру? Библиотечка начинающего программиста
Код — исходный текст программы Исходник — см. код Компиляция — процесс, в течение которого исходный код преобразуется в конечный exe-файл.
IDE во всем своем блеске. Симпатичная мордашка, не правда ли? Библиотека, Модуль — "кирпичик" будущей программы. Представляет собой отдельный файл, в котором хранится участок исходного кода, выполняющий какую-то конкретную функцию. Существует очень много стандартных библиотек, из которых программисты собирают программы. Таким образом, вся рутина при разработке приложения сводится к минимуму. IDE (Integrated Development Interface) —интегрированный интерфейс разработки. Под этими страшными словами скрываются всего лишь несколько главных окошек Делфи, с помощью которых ведется разработка программы. Приложение — вот таким неказистым словом назвали разработчики Windows все программы, предназначенные для платформы Wintel (Windows+Intel). Компонент — визуальный "кирпичик", который ставится на заготовку будущего окна и представляет собой какой-нибудь простой или сложный элемент управления (список, надпись, кнопка — это простые; окно рисования, браузер, окно просмотра анимаций — сложные). Форма — заготовка будущего окна Без программистов тут никуда. Мы не будем заглядывать в кодерские омуты, а только чуть-чуть погрузимся в этот интересный мир. Любой скрипт, любой конфиг для любой игры основан на одних и тех же общих понятиях программирования — вот и второе обоснование того, зачем вам может пригодиться навык элементарного программирования. Ведь иногда хочется покопаться во внутренностях чужой игры чуть глубже, чем это предусмотрено стандартными редакторами. И в этом случае без знания общих основ кодинга никуда. Так, что, товарищи геймеры, в ближайших номерах мы проведем тотальный ликбез по всем необходимым для успешного кодинга знаниям. А начнем мы, пожалуй, с начала... Руки — из ножен Если вы всерьез решите заниматься разработкой игр, то одних знаний по дизайну и обустройству игровых сцен недостаточно. Нужны еще и навыки программирования. Иначе могучая кучка сценарных файлов, скриптов, роликов, звуков, текстур и моделей никогда не воссоединится в единое целое. Конечно, можно попробовать игровые конструкторы, как, например, RPG Studio. С их помощью можно создать маленькую и непрезентабельную игрушку. Но для полноценной игры их возможностей явно недостаточно. Значит, придется учить какой-нибудь язык программирования. Сразу хочу уверить вас: это не так страшно и сложно, как может показаться на первый взгляд. Работа программиста ничуть не менее творческая, чем сценариста или дизайнера. Многие именно в строчках программ находят свое призвание. И очень многим (мне, например) процесс программирования просто нравится. Это не скучно и не занудно, как думают некоторые. И если вы все-таки решите посвятить часть своего драгоценного времени программированию — уверен, вы не пожалеете. И потом, кому-то все-таки придется создавать конечный exe! Трудности выбора Вслед за волевым решением начать-таки учиться программировать обычно следуют недоуменное почесывание в области окончания лысины и растерянная мысль: "А на чем программировать-то?". А действительно, на чем? Ведь языков программирования существует великое множество. Попробуем ответить на этот вопрос. Сразу отметаем языки и оболочки программирования не под Windows. Программировать под DOS сегодня считается моветоном. После второго взмаха суровой цензорской метлы в стороне остаются узкоспециализированные языки программирования, такие как Perl, Java, CGI, Python, Lisp, PHP и прочие. В центре нашей воображаемой сцены, сиротливо сжавшись, остались три языка программирования. Это Visual Basic, C++ (в двух инкарнациях — от "Борланда" и от "мелкомягких") и богатырь Delphi. Начнем поочередный медицинский осмотр. Призывник VB — шаг вперед! Итак, что мы имеем? Прогрессирующее тупоумие, неисправимый сколиоз, криворукость и косоглазость, чрезвычайную медлительность и неприспособленность к тяготам кодерской жизни. Марш из строя! А ну — к стенке... Я ничего не имею против Visual Basic, но для серьезных целей он явно не подойдет. И дело тут даже не в том, что "VB только для прожженных ламеров". Все гораздо проще. Основным признаком, по которому он отсеялся, является
В окне разработки - самая настоящая игра... медлительность. Программы, которые генерирует VB, не являются программами в чистом смысле. Это скорее скрипты, которые при запуске отдаются на съедение библиотеке-интерпретатору. Этим и обусловлена "тормознутость". Ведь, как известно, любая интерпретированная команда исполняется гораздо медленнее аналогичной компилированной последовательности. Так, разговорчики в строю! Кто тут у нас следующий? Ага, призывник C++, шаг вперед. Что это, у вас две головы? И четыре руки? И одна нога? Тут без поллитры не разобраться. Разделяем пациента надвое. В левой части у нас остался MSVC++, а в правой — Borland C++. Давайте Borland C++ оставим на жаркое, а пока покопаемся в творении Microsoft. Так уж сложилось, что MSVC++ является стандартом де факто как для программирования вообще, так и для программирования игр. На то было много причин. Во-первых, полное отсутствие конкурентов в момент выхода первой версии, а во-вторых, жесткая рекламная политика Microsoft. MSVC++ имеет много достоинств, но они полностью компенсируются недостатками. Во-первых, C++ сам по себе уже достаточно сложный язык, особенно для новичков. Но с привнесением Microsoft своих "фирменных" штучек стал совсем неудобоварим. В минусы можно также записать очень долгую компиляцию (порой растягивающуюся на часы), неудобный редактор ресурсов и неадекватную реакцию на ошибки. В общем, это явно не "наш выбор". Остается только одна альтерантива — Delphi. И это именно то, что я вам от всей души советую. И швец, и жнец, и на дуде игрец... Итак, Делфи (уж позвольте мне его фамильярно Скрижали истории
Самое смешное, что Delphi изначально был предназначен только для создания баз данных, как Fox Pro. Но когда разработчики увидели, что их СУБД очень часто используют "не по назначению", они смекнули о новых горизонтах. Поэтому к версии 2.0 Делфи был уже полнофункциональным интегрированным языком-оболочкой программирования. К версии 5 Делфи уже совсем отошел от СУБДшного прошлого. Но компоненты для баз данных все еще занимают львиную площадь палитры. Делфи довольно активно используется игроделами. Из российских проектов, созданных исключительно на Делфи, можно отметить "Штырлица". называть по-русски) — полнофункциональная интегрированная среда разработки приложений под платформу Wintel, основанная на языке программирования Object Pascal. И это является ее основным преимуществом. Во-первых, Паскаль — достаточно легкий язык программирования, и новичку будет очень просто им овладеть, тем более что он включен в обязательную программу по информатике многих школ. И вместе с тем Паскаль необычайно гибок и прекрасно подходит для решения широкого круга задач. В том числе для создания компьютерных игр. Delphi IDE — очень удобная среда программирования, оборудованная прекрасными средствами прямой отладки и визуального проектирования. Одна из самых классных фишек Delphi — уникальная компонентная система. Видимо, кто-то из разработчиков Делфи когда-то вопросил себя: а зачем делать то, что уже кем-то сделано? Не проще ли воспользоваться его наработками? Проявление этого девиза можно заметить буквально во всех частях IDE. Знаете, в чем состоит одно из основных преимуществ Delphi перед MSVC++? В исключительно малом времени компиляции. Чтобы скомпилировать небольшое приложение (например, текстовый редактор уровня WordPad), MSVC++ требуется около десяти минут, тогда как Делфи — только несколько секунд! Однако чудес на свете не бывает. Чем же достигается такая высокая скорость компиляции? Стандартное Windows-приложение состоит из множества повторяющихся модулей. Это процедуры создания/обработки/прорисовки окон, обслуживания устройств, визуализации графики и т.д. Каждый из комплектов процедур хранится в специальном программном файле. Так вот, MSVC++ при компиляции каждый раз перекомпилирует абсолютно все библиотеки, используемые в программе. А Delphi поступает гораздо умнее. Зачем делать то, что уже сделано? Все эти модули были однажды скомпилированы раз и навсегда, а потом просто подключаются к вашей программе! Легко, быстро и элементарно. Как только спецы из MS этого не поняли? Второе гигантское преимущество — система компонентов. Компоненты — это своеобразные стандартные "кирпичики", из которых можно построить программу. Благодаря им можно теоретически создать довольно сложную программу, не написав ни строчки кода. Выглядит это так. Допустим, мы захотели создать текстовый редактор вроде Word. Нет ничего проще. Ведь почти все его кусочки по отдельности уже доступны в палитре компонентов. Перво-наперво создаем новое окно. Из палитры
Та же самая игра в действии. компонентов мышкой перетаскиваем на форму главное меню. Прописываем все его пункты. Потом на эту же форму кидаем компонент Richedit — который сам по себе уже почти Word, только без интерфейса. Он может не только воспринимать и показывать текст, но и оформлять его по-всякому, сохранять/загружать, показывать много полезной информации. Потом кидаем на форму панель инструментов и красиво распределяем кнопки. Кидаем строку статуса. Создаем (все совершенно наглядно, только перетаскиваниями мыши) разные диалоговые окна. Ну, Word почти готов. Остается в программном коде прописать связи между элементами — и готово. Конечно, там тоже есть свои трудные моменты, но основу мы уже создали. Попробуйте-ка то же самое за такое же короткое время сделать в MSVC++! И, наконец, самая вкусная вещь. Дело в том, что процесс создания новых компонентов довольно прост, а потому уже с момента появления первого Делфи на просторы Интернета потоком хлынули самодельные компоненты и библиотеки. Результат очевиден. Наугад назовите какую-нибудь задачу или цель. Даю 99% гарантию, что под эту задачу уже написаны какие-то компоненты, если не полностью ее решающие, то хотя бы значительно упрощающие. Получается, что работа программиста сводится к минимуму. И это хорошо. На просторах Сети вы легко найдете огромное количество Делфи-порталов, где сможете скачать исходники самых разнообразных программ, полезные компоненты, утилиты, почитать статьи маститых разработчиков. Начать просто. Главное — вовремя остановиться, а то в последнее время разработчиков постигает повальная эпидемия гигантомании. Но я думаю, это вам не грозит. Игры в числах Но наша конечная цель — не просто создать программу, наша цель — создать Игру. А это Приложение запущено
Итак, у вас в руках уже есть заветная коробочка. Вы пришли домой, быстренько проинсталлировали чудо программерской мысли, запустили... И недоуменно смотрите на непонятный интерфейс. А зря. Ведь прямо здесь и сейчас мы можем создать небольшую программку. Ну, например, просмотровщик распространенных графических форматов. Готовы? Включите секундомер... Поехали! Главный интерфейс Делфи состоит из четырех окон. Самое верхнее — главное меню, кнопки запуска и отладки и палитра. Слева — объектный инспектор. Посередине находится заготовка будущего окна — форма, а под ней — редактор кода. На палитре на самой первой вкладке находим кнопку с рисунком кнопки (вот ведь парадокс). Нажимаем на нее, а потом кликаем по форме. Одна кнопка у нас уже есть. Так на форму "сажаются" все компоненты. Можете мышкой подкорректировать размер и положение кнопки (это делается так же, как в любом графическом редакторе). Переключаемся на вкладку Additional и цепляем на форму компонент с рисунком рисунка (опять парадокс). Получилась прямоугольная рамка под будущую картинку. Растягиваем ее почти на всю форму. Переключаемся на вкладку Dialogs и цепляем на форму самый первый компонент — открывающуюся папку. Это невизуальное окно открытия файла. После этого дважды щелкаем по нашей единственной кнопке на форме и пишем: "if opendialog1.execute then image1.picture.LoadFromFile(opendialog1.filename);". Вот и все. Наша первая программа готова. Запускаем ее (кнопка run на верхней панельке). Вуаля! Графический просмотровщик. Нажимаем на кнопку — появляется диалог открытия файлов. Выбираем какую-нибудь картинку, нажимаем "Открыть", и она тут же показывается у нас на форме. Беллисимо! Правда, наш просмотровщик открывает всего несколько форматов: bmp и rle. Но на первый раз этого достаточно. Хотя... Вы можете сделать поддержку формата jpg. Для этого переключитесь в окно редактора кода и сразу после жирного слова "uses" напишите "jpeg," (именно так, с запятой). Вот и все. Это было просто. уже серьезнее (парадоксально, но факт: среднестатистическая игра по технологичности гораздо сложнее среднестатистической программы). Что же в этом плане предлагает нам Делфи? Массу возможностей. Если речь идет о двумерной игре, к вашим услугам стандартный виндовый GDI или продвинутые интерфейсы, вроде DirectDraw. Хотите трехмерную графику? Нет проблем. Можете программировать с использованием OpenGL или DirectX. Выбирайте на свой вкус. Новичку трудновато бывает начать игру с нуля, даже если он пользуется такими классными библиотеками. Поэтому предлагаю начать свой игровой проект на основе какого-нибудь уже существующего бесплатного 2D или 3D движка. На просторах Интернета можно найти массу компонентов, облегчающих жизнь игродела. На первое время я могу вам посоветовать два самых моих любимых пакета работы с графикой. Если вам нужно быстрое и качественное 2D, выбирайте DelphiX. Это полнофункциональный набор компонентов, в составе которого есть даже почти готовый двумерный движок. С его помощью можно создавать практически любые двумерные игры, начиная от банального "вида сверху" и заканчивая продвинутой изометрией, как в Infinity (графический движок целой линейки игр, начиная с Planescape, BG и кончая IWD). С его помощью сотворить что-то наподобие Infinity — не проблема. Ну а если вас интересует исключительно 3D, то самый лучший бесплатный 3D движок под Delphi — GLScene. Он создан на базе OpenGL, следовательно, за нас играет большая, по сравнению с Direct 3D, производительность и скорость. Джон Кармак, как известно, признает только OpenGL. GLScene абсолютно бесплатен, но возможности его огромны и приближаются к возможностям "профессиональных" движков. Полный список поддерживаемых им функций занял бы не одну страницу. Самое классное в GLScene то, что он абсолютно универсален и своими возможностями покрывает все ваши потребности. Вздумалось вам, например, создать стрелялку. Да нет проблем! Что там самое главное? Динамизм управления и красивые эффекты. Оба этих требования GLScene выполняет. За динамизм управления отвечает великолепнейшая поддержка не только мышей и клав, но и всяких навороченных устройств — даже про джойстики с Force Feedback не забыли разработчики. Будет трясти так, что игрок мгновенно поверит в реализм. Ну а красивые взрывы и прочие спецэффекты легко соорудить с помощью систем частиц, благо и эта функция у GLScene на высоте. Хотите сверхреалистичный симулятор? Ради бога. Точнейшие расчеты столкновения объектов и реалистичная физика (уже, кстати, реализованная) к вашим услугам. Хотите экшен? Великолепным теням здешнего shadow manager позавидовал бы и Thief 2. Даже Soldier of Fortune удавился бы от зависти к GLScen’овской скелетной анимации. Импорт разнообразных форматов 3D файлов, трехмерный звук (в четырех системах), каркасное сглаживание, мультитекстурирование и мипмэппинг — все эти новомодные функции включены в последние версии этой замечательной графической библиотеки. Даже самые сложные эффекты с помощью GLScene воплощаются за считанные минуты. Движок очень гибок и легко подстраивается под нужды конкретного программиста. Еще одной уникальной возможностью движка является то, что вы можете строить свои виртуальные миры прямо на форме Delphi, не пользуясь никакими трехмерными редакторами. Вся мощь 3D акселераторов у вас под рукой. Под Delphi создано гигантское количество разных полезных библиотек и компонентов, которые значительно упрощают жизнь разработчика и привносят новые возможности в компьютерные игры. В заключение хочу сказать пару слов о Borland C++. Фактически это тот же самый Delphi, только под C++. А раз так, почему бы не использовать его для разработки игр? Я бы не рекомендовал. Это, конечно, Делфи, но не такой гибкий в настройках и в компонентной модели. Библиотек и компонентов под него значительно меньше, чем под Делфи. Теоретически, в Borland C++ должны работать все делфийные компоненты, но ведь это только теоретически. Так что для игродельческих целей он мало пригоден. Наш выбор — Делфи. В следующем номере мы продолжим знакомиться с радостями и тяготами программерской жизни. Как-никак, а без элементарных навыков программирования не может обойтись не только гейммейкер, но и самый обыкновенный геймер. Как так, спросите вы? А очень просто. Почти на каждом шагу геймеры встречаются с разнообразными косвенными проявлениями языков программирования. Пусть они сильно завуалированы, как, например, конфиги для Quake или скрипты для UT, но это все те же языки программирования. Именно о скриптах и конфигах мы и поговорим в следующий раз. Оказывается, сколь разработчики не извращаются в игровых скриптах, они не смогут слишком далеко уйти от первооснов, заданных очень давно. Значит, надо просто понять эти первоосновы, и тогда любой, даже самый навороченный, скрипт вы будете раскалывать как орешек.
848 Прочтений • [Игровая нирвана. Delphi и программирование компьютерных игр] [19.05.2012] [Комментариев: 0]