пятница, декабря 31, 2010

Лучшее за 2010 год

Традиционное подведение итогов прошедшего года. Статьи, которые больше всего читали и на которые больше всего ссылались.

Итак, наш победитель.... барабанная дробь... Выступление Эда Катмулла, президента Пиксара! Оно собрало огромное количество ссылок и уверенно держалось в топах в течение всего года.

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

Интервью проекту Open Quality и Временные оценки в программировании во многом перекликаются. Они также были популярны.
OpenQuality.ru

Интерес вызвали Неделя борьбы с велосипедизмом и запись доклада по ИИ в играх.

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

У меня год выдался неспокойный. У меня появился твиттер, я выступила на ADD-2010. И под самый конец года переехала в Редмонд и с нового года приступаю к работе в компании Майкрософт, буду программировать на С++ в Bing Advertising Team.

Всех с Новым Годом, дорогие друзья!
Пусть ваши выступления на конференциях будут также популярны как выступление Эда Катмулла.
Пусть Ваша Компания будет создана и начнет процветать, а Своя Игра будет дописана.
Пускай временные оценки будут соответствовать действительности, а менеджеры будут спокойными и довольными.
Пусть вам будет хорошо где бы вы ни были.

Оставайтесь с нами :-)

Ссылки по теме:
Лучшее за 2009 год
Лучшее за 2008 год

вторник, декабря 21, 2010

Книга Exploiting Online Games

Книга Exploiting Online Games попала ко мне в руки случайно. Я ее прочитала, она мне не понравилась, давайте расскажу почему.

Первые четыре(!) главы книги посвящены пространным размышлениям о том, что хачить нехорошо, а также рассказам о софтверных лицензиях. Читателям, дожившим до пятой главы, дается скупая и щедро разбавленная водой информация, которая как-то относится к теме книги. Также присутствует много отсылок к другим книгам тех же авторов.
Анализа и систематизации информации нет. Причем в большинстве случаев они говорят о WoW, книгу надо было назвать "Как наверное можно похачить WoW".
Эта одна из тех редких книг, из которых мне не удалось узнать вообще ничего нового. Что там есть вообще: у нас есть клиент, он обменивается данными с сервером. Теоретически, можно влезть в клиента, там есть интересная информация о состоянии мира. Можно слать на сервер свои данные. Можно написать бота. По большому счету это все содержимое книги.
Видимо, чтобы книга была толще, туда добавлена базовая информация по языку ассемблера и про DLL injection.

Совершенно непонятно для кого это все написано. Для читера она бесполезна, потому что там нет примеров типа "мы сделали то-то и то-то, получили такой-то результат". Читателю просто бросается какая-то мысль или кусок кода и... всё. Это порождает кучу вопросов. Чего дальше-то было? Оно заработало вообще? Что сказал Warden? Как быстро был закрыт аккаунт?

Для разработчика она бесполезна, потому что разработчик и так знает, что на клиенте много информации и что ее можно вытащить. И что читеры существуют и что ловить их по-одному - дурацкое занятие. Разработчику нужно вообще другое. Мне бы было интересно почитать о паттернах, по которым читеров можно распознать по статистике. Ведь если у одного игрока морковка начинает всходить вдвое быстрее, чем у всех остальных, это же видно хорошо... О реальных нетривиальных случаях читерства, о том, как с ними боролись. О статистике по читам. Что пытаются делать чаще, от чего потери больше.
О том, что вообще с этим делать. Как бороться с читерами, избегая таких сомнительных решений как Warden? Ведь Warden, будем откровенны, это же явное spyware. Как бороться так, чтобы ни в коем случае не обидеть честных игроков? Как держать читеров под контролем?
Как распознать бота? Если у нас игрок уже 24 часа бьет куриц, 1exp за курицу, как понять кто это - бот или усердный корейский студент? Может вывести ему сообщение "Курицы дарят вам 1000exp и просят оставить их в покое" с кнопками "Принять" и "Не принимать" и посмотреть за реакцией?
Большинство проблем происходит из-за того, что приходится доверять клиенту, ведь часть информации хранится на клиенте. Как снизить доверие к клиенту? Можно ли убрать оттуда часть информации? А всю можно? Проводились ли исследования в этой области? Возможны ли решения типа OnLive, когда игроку выдается только видеопоток?

Наверное, все это можно узнать где-нибудь на закрытых секциях GDC, в этой книге ничего такого нет.

Ссылки по теме:
Слайды, в которых есть много информации из этой книги

понедельник, декабря 13, 2010

Я хочу программировать игры! Что мне делать?

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

Итак, для начала нам надо понять, как именно происходит разработка игр. И познакомиться с общей ситуацией в индустрии...

-Алёна, давай ближе к делу! Лесом ситуацию в индустрии, программить уже давай!

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

-Я поставил себе Visual C++ 2010? Я все правильно сделал?


Если вы работаетет с Windows, то да, лучше Visual C++ и лучше версию поновее. Про разработку игр под Линукс я не в курсе...

-DirectX или OpenGL?


Это зависит... На Windows в основном используется DirectX. Но это вовсе не значит, что OpenGL никому не нужен. На консолях встречаются графические API, сильно похожие на OpenGL, ну и под Линуксом никакого DirectX нет.

-Так все-таки, DirectX или OpenGL?

Ставьте DirectX. :-)
Только DirectDraw смотреть не нужно, им никто не пользуется.
В DirectX есть очень хорошие хелпы и примеры, не игнорируйте их.

-У меня ничего не работает, ничего не компиляется!

Вы не одиноки. Поищите ваши ошибки Гуглом, наверняка найдете таких же несчастных.

Но будьте готовы к тому, что вы не найдете материалы, где бы вас провели за руку от начала и до конца.

-Да ну, там все по-английски...

Надо учить английский. На русский переведено мало и для работы этого недостаточно.
Как обычно, Google is your friend. Вот что выдает нам поиск по запросу game programming lectures.
Game Programming 2007
CSE 191: Video Game Programming Seminar
Обзор книг по программированию игр я делала здесь. И вот еще открытые исходники игр.

-Правда, что все игры разрабоатываются на С++?


Игры разрабатываются не только на С++. Активно используются также:
Python, Lua - Для скриптования игровых движков. Также для скриптования могут использоваться языки, специфичные для данного движка. Например, UnrealScript.
C# - утилиты. Очень любим, потому что С++ программистам с ним легко разобраться.
C#, Java - серверная часть MMO.
Java - используется на мобильных платформах
HLSL - используется для программирования шейдеров

Знание С++ не то чтобы обязательно, но он в разработке игр используется очень активно и с ним жизнь упрощается.

-Что такое игровой движок? У меня уже есть DirectX. Это что, не движок?

DirectX работает на уровне "нарисовать треугольник". Игровой движок поднимает вас на уровень выше, здесь будут "объект с трехмерной моделью и поведением", "вода" и т.п.

Игровые движки бывают разные. Например, может быть только графический движок, но без физики. Вы тогда можете писать физику сами или подключить какой-нибудь движок физики. Также отдельно может идти AI движок.

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

Примеры бесплатных движков:
OGRE (Altren в комментариях настаивает, что в OGRE только графика и ничего другого там искать не надо), Irrlicht - игровые движки, графика там в основном, насколько я помню
ODE - движок физики

Игра - это не только DirectX, не только графика. Если вас интересует устройство на работу в качестве разработчика игр, то посмотрите вакансии игровых контор, посмотрите чего они хотят и вам станет понятнее чего учить (Epic games, id Software).

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

Graphics programmer - программист графики. Здесь нужно знание математики (векторы, матрицы, кватернионы). Понимание того, как работают видеокарты, шейдеры.
Physics programmer - программист физики. Нужны довольно специфичные знания физики, ну и математика тоже.
AI programmer - программист искусственного интеллекта. Алгоритмы на графах (A*, Дийкстра), конечные автоматы...
Gameplay programmer, game mechanics programmers - программист игровой механики. Эта роль вызывает больше всего непонимания. Это те программисты, которые пишут в игре всё остальное. Изменение параметров при попадании одного юнита в другого, отображение этого всего в интерфейсе, подгрузка следующего уровня. Куча вот таких мелочей.
Interface programmer - разработчик интерфейсов.
Network programmer - сетевой программист. Нужны стандартные знания по разработке сетевого кода.
Tools Programmer - разработчик утилит. При разработке игры используют дополнительные программы, которые иногда пишутся самостоятельно, иногда покупаются вместе с движком. Пример игровой утилиты - редактор уровней.

Также бывают нужны инженеры для поддержка автосборки, программисты аудио, специалисты для работы с базами данных.

Для начала не пытайтесь написать игру с нуля. Модифицируйте чужой код, пишите моды.

Потом напишите небольшую игру от начала и до конца. Графику либо нарисуйте тестовую, либо найдете в интернете, есть сайты где модели раздаются бесплатно под некоммерческие проекты.

-Да, у меня есть отличная идея MMORPG!


Возьмите любую MMORPG, откройте кредитсы и посмотрите на список людей, которые работали над этим проектом. Далеко не все они страдали там фигней, уверяю вас. Разработка MMORPG - многомиллионный проект с количеством людей, несколько больше одного.Для начала напишите паззл небольшой, напишите арканоид.

-Алён, ты что, шутишь?

ОК, пусть это будет RPG, без MMO. Один, маленький уровень, как можно меньше деталей. Попробуйте получить минимальную играбельную версию.

-Алёна, у меня еще куча вопросов!


Постараюсь ответить. Но не могу обещать, что отвечу на все :-).
Ахинею про то, о чем не знаю, писать не буду. Спрашивайте в комментариях.

Ссылки по теме:
AIGameDev
Вопросы по программированию ИИ в играх

среда, декабря 08, 2010

Выложили записи моих докладов с ADD-2010

Организаторы потихоньку выкладывают записи докладов с ADD-2010, мои уже выложили.

Первый доклад, Искусственный интеллект в играх
Про нечестные приемы, про поиск пути и навигацию.

218-Games-AI-add-2010.avi from Stas Fomin on Vimeo.


Материалы, которые я использовала для подготовки к докладу:
It's not fun if you fake it. Rigged gameplay mechanics are starting to piss me off.
The Pure Advantage: Advanced Racing Game AI
18 Embarrassing Game AI Bugs Caught On Tape... and Fixed!
OpenSteerDemo
The psychology of randomness
WeightedDecayRand
GDC 2010 Keynote Address: Sid Meier
Theta*: Any-Angle Path Planning for Smoother Trajectories in Continuous Environments
Near-Optimal Hierarchical Pathfinding (HPA*)
Сравнение алгоритмов поиска маршрутов в StarCraft и StarCraft 2
There's a Hole in Your NavMesh, Dear Zombie

Второй доклад, C++0x
Я не рассчитала время, доклад получился коротким. Первратим это в плюс.
Короткий, но насыщенный доклад про C++0x! Всего на 25 минут, а если вопросы не слушать, то и того меньше!

225-C0xx-add-2010.avi from Stas Fomin on Vimeo.



Updated 09.12.2010:
Во время доклада был задан вопрос, почему для атрибутов нельзя использовать слово final вместо [[final]]. Там были высказаны предположения, но ответ так и не был дан.
Отвечает Герб Саттер.
Для это пришлось бы использовать контекстный парсинг, а делать это не хотелось, потому что нигде до этого в языке это не использовалось. Но все-таки они решили сделать именно так. И final будет просто final, без каких-либо скобочек.
/Updated

Материалы, которые я использовала для подготовки к докладу:
C++0x features and their support in popular compilers
Initializer List proposed wording
Compile-time 'String' Manipulation with Variadic Templates
C++0x: An overview, by Bjarne Stroustrup
C++0x FAQ
C++0x Core Language Features In VC10: The Table
Summary of C++0x Feature Availability in gcc and MSVC
C++0x. Лямбда-выражения
C++0x lambda

P.S. Лучше все это смотреть в HD и на полный экран

среда, декабря 01, 2010

Неделя неслыханной щедрости

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

В сегодняшнюю раздачу слонов попали.

Wikipedia
О, неисчерпаемый источник полезной информации. Именно оттуда я узнала, что средняя скорость ленивца два метра в минуту, а когда опасность, то и все четыре. Что энергетический бюджет нашей планеты - 174 петаватта. Что Поль Брэгг умер от сердеченого приступа, а вовсе не утонул.
К тому же там в последнее время появился громадный баннер, Джимми Уэйлс смотрит с него большими печальными глазами и просит денег.
650 рублей Википедии. Баннер после этого никуда не исчез, правда :-)
Donate to Wikipedia

Firefox и Thunderbird - давно пользуюсь этими двумя софтинами. Firefox здоровый, у него течет память (или уже починили?) и я с него все пытаюсь на что-нибудь перелезть, но он служил мне долгие годы.
Отдельно на софтину пожертвовать нельзя, можно перевести пожертвования Mozilla Foundation. Суммы фиксированы. Я выбрала 25 долларов. И они обещают прислать плюшевого дракончика!
Donate to Mozilla Foundation

WinRAR
Отличный архиватор, и он не бесплатный. Лицензия стоит 29 у.е.
Купить WinRAR

Tortoise SVN
Лучший клиент к Subversion под Windows. Пользуюсь много лет, довольна.
Там можно сделать подарок каждому разработчику индивидуально через Амазон, я сначала так и хотела сделать. Но у меня не получилось, вы не поверите. То "мы это не можем доставить", то "не факт, что в регионе получателя этот диск будет играть". Ну нафиг.
Так что просто 10 долларов им перевела.
Donate to Tortoise SVN

Inno setup
Самая лучшая программа создания дистрибутивов под Windows. А я много какие пробовала. Простая, понятная, без дурацких разноцветных кнопочек и может все.
5 долларов
Donate to Inno setup


Были некоторые проекты, которым я хотела дать денег, но не нашла как. Это WireShark, причем у них в рассылке был по этому поводу вопрос, на него никто не ответил. Это Far Manager, и это GCC.

И помните - никогда не поздно поддержать неделю неслыханной щедрости. :-)

Updated:
Меня тут спросили а как поддерживать-то?
Напишите в каком-нибудь твиттере, что это хорошая идея и дайте ссылку.
Напишите, что это глупая и бесполезная затея и дайте ссылку.
Сделайте donation и напишите об этом у себя в блоге и... дайте ссылку
Сами придумайте еще чего-нибудь.