Хакер № 9.99
Вступительное слово
В мире компьютерных игр, точнее, в той их части, что ориентирована исключительно на 3D графику, похоже, наступает переломный момент - выходит несколько 3D ускорителей, поддерживающих аппаратное ускорение преобразований и освещения. Дело в том, что предыдущие акселераторы ускоряли только последнюю стадию рендеринга - текстурирование полигонов и вывод на экран, рассчитывать же перемещения и освещенность объектов все равно приходилось процессору. Теперь с выходом GeForce - нового ускорителя от nVidia (создателей великолепной Riva TNT) разработчики наконец получают возможность сделать то, о чем так долго мечтали геймеры: реальное освещение, тени, зеркальные и отражающие поверхности, морфинг и многое-многое другое. Браво, nVidia!
Редактор "Мастерской"
Александр 'Xenocid' Колосков
Стая
Человек - существо исключительно стадное. Несмотря на то, что мы предпочитаем уподоблять себя разнообразным крутым хищникам-одиночкам (волкам, ягуарам, коршунам...), в действительности мы скорее напоминаем антилоп и прочих оленей. Сбиваться в стаю и сваливать заботы о себе на вожака, которого при случае сами же и затопчем - черта вполне человеческая. А еще мы любим тратить свое время на разговоры, а точнее - на бессмысленный треп.
И если при этих словах у тебя перед глазами встает образ старушки-божьего одуванчика, сидящей на завалинке перед современной многоэтажкой и судачащей с товарками о том, что "... у Светки из третьего подъезда новый хахаль объявился, а Димка-сорванец опять клей нюхает...", то тебе рекомендуется взглянуть со стороны на себя самого. Подумай, сколько часов ты провел в чате, на какой-нибудь "Кроватке", обсуждая вечные тинейджерские "кто, с кем, где и сколько литров". Другой характерный пример - ФИДО. Не спорю, в ФИДО есть немало интересных и по-настоящему профессиональных конференций, но большинство ASCII-символов, пролетающих по нашим перегруженным телефонным линиям, несут ноль целых нольдесятых полезной информации. Неудивительно, что для многих "взрослых дядей" слово "фидошник" ассоциируется со словом "трепач".
Но есть и еще одна интересная особенность. Периодически даже самым отъявленным мастерам по чесанию языком надоедает вести разговоры ни о чем. Для выхода из этой пренеприятной ситуации существует один хороший патентованный метод: придумать себе какую-нибудь цель, затем сколотить "стаю" единомышленников и несколько месяцев с удовольствием смаковать обсуждение этой самой цели.
"Все это замечательно, мон шер! Но причем здесь игры?" Ответить на этот вопрос очень легко. Дело в том, что очень часто "целью", о которой я говорил ровно 43 слова назад, становится написание какой-нибудь супер-пуперской программы, которая покажет всему миру твоиталанты и втопчет в грязь нечестивых конкурентов. И вот любопытная деталь... большинство проектов, а плодятся они, как китайцы в урожайный год, в количествах неимоверных, создаются для написания либо своей "новой-лучше-чем-Windows" операционной системы, либо "втопчем-Кармака-в-грязь" игрушки.
Но поскольку мы до сих пор запускаем Quake 3 из-под Windows 98, результат работы подобных "стай", я полагаю, понятен и в комментариях не нуждается. Тем не менее, физиологии противиться сложно, и вот молодые неокрепшие души вроде тебя снова и снова сбиваются в стаи со звучными названиями. И раз уж тебя угораздило прибиться к стае, подумай как извлечь из этого максимальную пользу.
Сперва - самое главное. Отчего рушатся стаи?
Причина первая - голод. По первому времени вычесывание блох и перебранка с соседями кажутся замечательным времяпрепровождением, но поскольку дичь (то бишь деньги) сама в гости не заявится и на вертел сама себя не насадит, через пару недель желудки начинает сводить от голода, и тогда самые способные члены стаи начинают иногда покидать лежбище, чтобы поохотиться на стороне, написать пару-тройку программ на заказ. Периодически они возвращаются сытые и довольные, рассказывают о своих похождениях, об удачной охоте, но время идет и возвращаются они все реже и реже, возможно предпочитая охотиться в одиночку, возможно - прибиваясь к другим стаям. А в логове остаются только больные и увечные особи, самостоятельно ни на что неспособные. Итог: будь сильным.
Причина вторая - власть. "Акела промахнулся, Акела промахнулся!!!" Большинство людей абсолютно уверены в том, что быть начальником намного лучше, чем быть подчиненным. Сам подумай, ведь слово "власть" у тебя наверняка ассоциируется со служебным автомобилем, загранкомандировками, красоткой-секретаршей, приносящейкофе в кабинет, и фуршетами, где, небрежно зажав вилку с недоеденным кальмаром в одной руке и бокал с коньяком в другой, ты ведешь светскую беседу с себе подобными. На самом деле, типичные атрибуты начальника - это головная боль, галстук-удавка и личная (а порой и материальная) ответственность за людей и бизнес. Тот, кто хоть раз в жизни отведал удовольствия руководить разгильдяями-программистами, вечно срывающими все сроки и имеющими собственное мнение по каждому вопросу, намного спокойнее относится к перспективе стать вожаком стаи. К сожалению, это сакральное знание недоступно для понимания новичков. Как результат, в первые недели существования стаи основной темой для обсуждения становятся разборки на тему "у кого хвост длиннее". Кстати, именно по этой причине загнулся проект "Golgopha Forever". Помнишь, нет? В Х о нем не раз упоминалось. Какое-то время назад небезызвестная компания Crack dot Com обанкротилась и в качестве прощального прости сделала подарок, выложила в Сеть все исходники и ресурсы от своейнеоконченной игрушки - Golgopha. Дескать, пользуйтесь и поминайте нас добрым словом. Что тут разгорелось! Собралась группа энтузиастов, громогласно заявивших: "Не дадим умереть проекту!!! Пусть акулы капитализма стремятся проглотить чудесное начинание, номы встанем грудью и отстоим Голгофу. Догоним! и перегоним! и т.д.". Под эти знамена собралась куча народу... и первое, что вся эта шайка начала делать, так это делить власть. Кому управлять проектом, на каком сайте проект будет хоститься. Короче говоря, страсти кипели, а игра все больше покрывалась мхом и плесенью. Джонатан Кларк - бывший ведущий программист и идеолог Голгофы, дважды разгонял свою стаю и дважды набирал ее заново, пока наконец и ему не стало кристально ясно, что толку от кричащей и дерущейся стаи нет и не будет. Так и осталась Голгофа валяться на обочине прогресса, смятая и выпотрошенная, как жертва Фредди Крюгера.
Мораль сей басни такова. Совершенно бессмысленно собирать толпу любителей надеясь написать игру не умением, а числом. Единственный способ создать что-либо удобоваримое - это иметь светлую голову, ангельское терпение и бронзовую попу. Дерзайте господа.
P.S. Журнал Game.exe намедни объявил конкурс на лучший любительский игровой проект с весьма внушительным призовым фондом. Поучаствуем? ;)
Александр 'Xenocid' Колосков(xenocid@xakep.ru )
Рабочая лошадка программиста
Что бы там ни говорили поклонники Delphi, Visual Basic'ов и прочих сред программирования в стиле "поводи мышом и сруби капусты", а текстовый редактор остается основной рабочей лошадкой программиста. Рисовать интерфейсы - это, конечно, здорово, но основная часть программы по-прежнему набивается обычным текстом, и я сомневаюсь, что в ближайшее десятилетие прогресс достигнет такой стадии, когда сумбурные мысли программиста будут улавливаться и преобразовываться в программу, минуя стадию набора исходных текстов. Кстати, по этой же причине программист просто обязан уметь печатать "слепым десятипальцевым" методом не хуже профессиональной машинистки. Хороший программист натаптывает в среднем 200-500 строчек отлаженного кода в день. Поэтому неудивительно, что в богатом семействе текстовых редакторов появились и специализированные - программистские, сконструированные специально, чтобы потакать прихотям работников компилятора и отладчика. Чем таким особенным должен обладать программистский редактор? В первую очередь, он должен быть достаточно легким и быстрым. Так как, во-первых, приходится часто прыгать туда-сюда между несколькими файлами, а ждать каждый раз по 2-3 секунды, пока, скажем, Word соизволит переключиться в другое окно, никто не станет. Во-вторых, твоя глючная программа и в одиночку способна подвесить операционную систему, затребовав у нее все ресурсы, а уж если и редактор будет жрать черт знает сколько памяти процессорного времени, то об отладке можешь просто забыть. Другая важная вещь, которую должен уметь делать программистский редактор, - подсветка исходников. Да-да, та самая фича, которая подкрашивает операторы языка в один цвет, названия твоих переменных в другой и т.д. Лучше всего, если редактор умеет подсвечивать синтаксис сразу нескольких языков, тогда ты сможешь работать в своем любимом редакторе вне зависимости от того, на каком языке пишешь. Используй хоть C++, хоть ассемблер, хоть Java. Здесь есть одна тонкость. Дело в том, что подсветку синтаксиса можно делать двумя принципиально разными способами. Можно написать нечто вроде синтаксического анализатора, который будет анализировать то, что ты печатаешь, и определять, где у тебя переменная, где оператор, где комментарий и т.д., соответственно, подкрашивая все в разные цвета. Если в редакторе реализован такой подход, то подсвечивать можно все что угодно - гибкость необычайная. Но есть и два существенных недостатка. Во-первых, такойсинтаксический анализатор съедает довольно много ресурсов процессора, а во-вторых, писать такие анализаторы очень нелегко. Поэтому если редактор ориентирован на работку не с каким-либо одним языком, а с целым множеством, то разработчики выбирают второй способ - похалявнее. В редактор просто-напросто забивается список операторов какого-нибудь языка, и как только ты набьешь это самое заветное словечко, оно тут же покрасится в нужный цвет. Программируется такая фича за 5 минут, поэтому большинство редакторов используют именно этот, второй вариант.
Второй важной характеристикой для программистского редактора является способность анализировать исходники и предоставлять программисту более упорядоченную информацию, чем просто набор файлов. Так, например, редактор из состава Visual C позволяет просматривать исходники не только в виде файлов, но и в виде дерева классов. Если ты пишешь свои программы, используя объектно-ориентированный подход, то тебе будет очень удобно ориентироваться в своей программе.
Можно долго говорить о тех или иных интересных особенностях разных программистских редакторов, но лучше всего посмотреть на наиболее часто употребляемые и выбрать себе один из них.
MultiEdit
Ветеран программистских редакторов. Интересен в первую очередь тем, что написан на собственном макроязыке. Поэтому, если тебе захочется что-либо изменить и ты не найдешь подходящей опции в настройках (хотя настроек там столько, что мне даже сложно представить, что еще может понадобиться), то ты можешь просто подредактировать код самого редактора.
MultiEdit понимает несколько десятков языков программирования, но, к сожалению, подсветка синтаксиса в нем сделана "халявным" способом. Редактор очень-очень быстрый, практически не жрет ресурсов, абсолютно неприхотлив к оборудованию. Недавно была выпущена новая 32-битная версия под Win98/NT, содержащая ряд улучшений. Для этой версии (8.0) существует крэк, хотя найти его оказалось и не очень легко. К сожалению, полностью отсутствуют средства для просмотра исходников в виде классов и функций, что сильно усложняет использование MultiEdit в больших проектах.
Visual SlickEdit
Очень интересный редактор. По своим функциональным возможностям изрядно похож на MultiEdit, такое же богатство настроек и дополнительных фич. Есть один большой минус - он значительно тяжелее, чем MultiEdit, но и большой плюс - в Visual SlickEdit встроен весьма приличный проcмотрщик классов, функций и т.д. Пожалуй, лучше он реализован разве что в Visual C. Вообще, этот редактор настолько близко подошел по своим возможностям к редактору, встроенному в Visual C, что фактически для меня он стал реальным кандидатом на замену последнему. В Visual SlickEdit есть даже новые функции автоматического допечатывания слов, которые появились только в 6-й версии Visual C. Допечатывание - это очень удобная штука. Работает она так: предположим, у тебя в программе есть переменная с каким-нибудь длиннющим, как удав-отморозок, именем. Понятно, что каждый раз печатать его заново, мягко говоря, не хочется. Так вот, если твой редактор поддерживает функцию "допечатывания", ты просто пишешь несколько первых букв имени своей переменной, потом нажимаешь какую-нибудь специальную комбинацию клавиш и умница-редактор сам допечатывает за тебя имя переменной. Поверь мне, скорость набора текстов ускоряется в разы, но такой крутой штукой могут похвастаться пока только Delphi, Visual Basic, Visual C и Visual SlickEdit. Такой вот крутой редактор, очень рекомендую.
Visual C Editor
Этот редактор - нечто вроде эталона. По крайней мере, для меня. В этом редакторе есть практически все, что нужно. Правильная (в смысле, "честная") подсветка синтаксиса, просмотр классов, функций, переменных и т.д. Очень хорошие операции поиска и замены. Мощный механизм закладок. К тому же, если уж очень не хватает какой-либо мелочи, ее всегда можно запрограммировать на встроенном скрипт-языке и подключить к редактору. Единственный серьезный недостаток, который, к сожалению, не исправляется подобным способом - тяжеловесность редактора. Слишком уж он привязан к компилятору, к отладчику и т.д. Да и вообще, как подавляющее большинство продуктов от дядьки Билли, страдает ожирением.
Вот и получается парадоксальная ситуация: с одной стороны, есть легенькие, быстрые редакторы, казалось бы используй-не хочу. Ан нет, один раз испробовав то ощущение могущества, которое дает редактор Visual C, трудно потом уходить на более бедные по возможностям системы. Так вот и мучаюсь, как небезызвестный осел одного мифического персонажа по имени Буридан.
VIM
Забавная вещь, этакий гость из темного Юниксового прошлого. Давным-давно, когда дядька Билли еще под стол пешком ходил, в могучем Юниксе было два "самых-лучших" текстовых редактора - eMacs и vi. Естественно, что и того и у другого редактора были свои сторонники и свои ненавистники, но в целом - некое подобие баланса существовало. При этом надо учитывать, что с такой вещью, как "графический интерфейс пользователя", юниксоиды сталкиваются крайне редко, поэтому оба редактора были исключительно текстовыми (в смысле, работали в текстовом режиме, да еще и не поддерживалимышь). Что случилось потом, ты и сам знаешь. Пришел дядька Билли, принес Windows, в которой редакторы были графическими, многооконными, поддерживали мышь и все такое. Однако некоторые люди настолько привыкли к текстовым уродцам, что вот подавай им EMacs для Windows, и все тут. Собственно, такие версии и появились. Более того, были даже сделаны попытки привинтить к ним нормальный графический интерфейс, но, честно говоря, ничего путного из этого так и не вышло. И вот несколько лет назад появился vim (VI iMproved), который должен был стать апофеозом юниксовых редакторов на Wintel платформе. Возможностей у него действительно масса. И синтаксис он умеет подсвечивать, и поиск-замена у него реализовано неплохо, но все-таки - очень уж он непривычный и старомодный. Скажем, он не поддерживает мышь, поэтому все команды ты отдаешь, используя командную строчку. Основной аргумент сторонников такого подхода - это возможность работать с редактором, не отрывая рук от клавиатуры. На мой взгляд, достоинство сомнительное, времени на манипуляции с мышкой уходит не сильно больше, а необходимость держать в голове десятки команд, честно говоря, напрягает. Но если кому-то нравится, то вперед на www.vim.org.
Интернет для "Мастера"
MathEngine - уникальный движок, предназначенный для программирования реалистичной физики в играх (и не только). Масса полезной информации для профессиональных разработчиков.
Этот сайт уже упоминался в одном из выпусков "Мастерской", но и тем не менее - стоит туда заглянуть еще разок. Сайт постоянно обновляется, недавно появились интересные статьи о том, как программировать интерфейс, использовать TrueType шрифты в DirectX и многое другое.
3D движок с исходниками, выглядит довольно неплохо. К тому же работает как под Windows, так и под Linux.
"Итак, ты хочешь разрабатывать игры" - именно этими словами встречает сайт Дайаны Грубер тех, кто только-только начинает.