Поделиться

пятница, 23 июля 2010 г.

Трофеи, достижения, настоящее компьютерных игр и недалекое будущее

Есть такая штука как профиль пользователя игровой консоли. А еще есть разнообразные трофеи (trophies, случай Playstation 3), достижения (achievements, случай XBox360) и, видимо, что-то аналогичное на Nintendo Wii (не знаю, ей Богу, ни разу не играл и в собственности не имею), которые пользователь получает за какие-то деяния в играх (некоторые получаются просто по ходу игры, для получения других нужно помучиться, например, найти все куски чего-либо на карте неизвестно какой, сняв армор и вообще без какого-либо снаряжения, ночью, не будучи ни разу укушенным вампирами, зато наступив на 34 красных слизняка, минуя всех желтых и фиолетовых). Они вроде медалек или значков, которые прикрепляются к профилю пользователя, ими можно хвастаться... перед такими же отмороженными личностями, как и вы сами.


Трофеи добавляют некоторое количества азарта при игре в любую... игру, хотя все, конечно, зависит от вашего восприятия - вполне возможно, что вам наплевать на них. Производителям игр (даже откровенно отвратительных, наподобие Ultimate Alliance 1 & 2 или Star Wars: The Force Unleashed) трофеи нужны, чтобы продержать игрока за своим творением подольше. С такими, как я, упрямыми не в меру товарищами это работает: даже если я весь игровой процесс плююсь, я все же дойду "шедевр" до конца и даже потрачу на сбор "почти полученных трофеев" еще пару часов (добью 499-го и 500-го противника специфическим ударом или поищу последний ненайденный кусочек абсолютно ненужной по ходу игры вещи).

Сейчас лично для меня на игровом рынке практически полное безрыбье - не то, чтобы игр не выходило, но все, чего я ждал несколько месяцев или лет (Resonance of Fate, Dragon Age, Uncharted 2 и т.д.), уже давно вышло и пройдено на 100% по трофеям. Непокоренным пока остался только Assasin's Creed 2, но это временное явление. Я недавно грустно пошутил: "Проблема не в том, что покупать нечего - ждать нечего!" Соответственно, я взялся искать на полках что-нибудь, чтобы переиграть, и вот тут возникли проблемы:

  • "хорошие игры", с моей точки зрения (таковыми я считаю большие продуманные произведения с отличным сюжетом, механикой и прочим), уже были сыграны и переиграны не один раз - трофеи зарабатывал, так что еще в 10-ый раз переигрывать как-то уже неохота;
  • смотря на список трофеев в "хороших играх" я сразу вспоминаю всю игру в деталях - опять же охота отбивается;
  • некоторые трофеи "хороших игр" напоминают о мерзопакостных сложностях, с которыми я столкнулся в процессе их прохождения;
  • соответственно, на поверхность всплывают "нехорошие или откровенно плохие игры" (примеры откровенно плохих игр я приводил выше, а "нехорошие", по моему мнению, - это любая "казуальщина", поскольку я - core gamer), которые хоть и были пройдены, но далеко не все трофеи в них были взяты...
Внесу некоторые пояснения:
  • "core gamer" - человек, настроенный на целенаправленное прохождение игры и достижения в ней, то есть на обследование всех закоулков, нахождение секретов, победы в многопользовательских играх, выполнение опциональных квестов и так далее;
  • "casual gamer" - человек, играющий от случая к случаю: в обед, в транспорте, раз в неделю, раз в год, для которого не важен сюжет - он все равно забудет в промежутке между "забегами", в чем он заключался и стратегия развития персонажа - он и о ней забудет, как и о смысле тех или иных навыков и т.д.
Большие продуманные RPG - это игры для core gamers, Тетрис, наверное, наилучший пример казуальной игры.

Граждане, это что же такое получается? Выходит, что вся эта система с трофеями придумана для того, чтобы заставлять меня снова и снова мучиться с откровенно отстойными продуктами, отгораживая меня от хороших. Жесть, да и только.

Получается примерно так:
  • люди, одержимые трофеями, будут играть и в хорошие, и в плохие, и в нехорошие игры без разбора;
  • казуальным игрокам просто наплевать на трофеи;
  • почитатели "хороших" игр (опять-таки согласно моему определению) вне зависимости от того, интересуются они трофеями или нет, сидят на безрыбье - старье пройдено 10 раз, а "новья"... об этом ниже.
Еще производители игр полюбили делать DLC (downloadable content - дополнительные костюмы, миссии, эпизоды к существующим играм), естественно, не бесплатные и добавлять трофеев вместе с этим DLC. Я только что прошел Dragon Age на 100%, я горд и счастлив - какого черта у меня опять 80? Ага, вышел очередной DLC, чтоб вам пусто было. Это делается с той же целью - привязать, заставить играть в свое чудо дольше.

Система персональных трофеев - это неплохой индикатор состояния и течений в отрасли компьютерных игр. Например, можно сравнить те выводы, которые я сделал выше на основе анализа трофейной схемы, с результатами прошедшей недавно E3 и тем, что говорят производители консолей и о производителях консолей:
  • большинство игр на выставке - это либо казуалки, либо 3D-шутеры (хотя я, конечно, составил небольшой списочек игр, которые меня будут меня интересовать в грядущем году);
  • производители консолей совершенно откровенно говорят о том, что их цель сегодня - это увеличение аудитории "играющих семей" и казуальных игроков, которых потом (когда-нибудь и если) можно будет сделать core-игроками, а что до нынешних core - они и так никуда не денутся;
  • в связи с этим снижения доли казуалок и увеличения доли больших проектов ждать не приходится - иногда смотришь на то, что выходит и диву даешься: такое ощущение, что индустрия не просто остановилась, а вернулась на 20 лет назад с аркадами и прочими штуками тех лет, только покрасивее - для меня это страшный сон;
  • опять-таки в связи с необходимостью расширения аудитории семьянинов и казуальщиков Sony и Microsoft ломанулись в управление посредством манипуляции (Move и Kinect, соответственно), поскольку именно такой необычный (когда-то) подход к управлению принес успех Nintendo Wii, лидирующей в нужном двум гигантам сегменте, - не до хороших игр, главное сделать дубинку поточнее и поменьше или обойтись вообще без нее, чисто размахивая руками (от себя могу сказать, что у меня большой диван, маленький промежуток между ним и подставкой для телека/приставки, так что прыгать и махать руками негде, а кроме того, я сажусь на диван и ставлю рядом кружку чая и фрукты не для того, чтобы через секунду вскакивать и... манипулировать - мне и с джойстиком хорошо);
  • 3D-телевидение и прочее... Ну, опять не до игр: "Смотрите, какое оно по-новому трехмерное!" 3D-графика всегда была обманом мозга и остается им - опять торжество формы над содержанием, как и везде (что до меня лично, то мне как человеку с миопическим астигматизмом и персональными очками одевать еще одни неудобно, а глаза устают через 5 минут максимум, вывод: плевать эти 3D-визуализаторы хотели на меня в качестве клиента как и на всех очкариков в мире);
  • новая модель продажи игр: теперь мы с вами будем получать не полный комплект, а затравку - пол-игры или 90%, а остальное будем докупать онлайн - это уже понятно.
Вот такое настоящее и будущее - наслаждаемся!

суббота, 17 июля 2010 г.

Жизненный путь: Java и Java-script

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

Что касается языка программирования Java и его производных, то тут, надо признать мне похвастаться особо нечем. Я начал изучать его из соображений чистого энтузиазма где-то в 1996 году по книге одного из его создателей Патрика Нотона (эту книгу потом "заныкала" моя сокурсница, утверждая, что не отдаст, пока я не выдам ей подарок на день рождения, на который меня, кстати, не пригласили; подарок так и не получила, так что книжку так и не отдала). В то время Java не была таким монстром, как сегодня - воспринималась как средство для анимации картинок на веб-страницах, создания часиков и прочей мишуры. Этой мишурой был набит до отказа каждый второй сайт (с появлением Dynamic HTML от Microsoft ситуация еще более усугубилась). Только спустя несколько лет стало понятно, насколько мощным может быть этот язык в умелых руках - мне доводилось видеть и работать над огромнейшими и полезнейшими приложениями целиком или большей частью реализованными на Java.

Помню в той самой книге Нотона меня привлекло несколько тезисов относительно Java. На сегодняшний день все это не ново, не уникально или уже показало свою несостоятельность, а вот тогда было и ново, и уникально, и хотелось верить во все это:
  • наличие автоматической сборки мусора;
  • неотделимость объявления класса от его реализации;
  • строгая типизация;
  • отсутствие непосредственной работы с указателями;
  • интерпретация и переносимость;
  • безопасность ПО для клиентского компьютера благодаря "sandbox" или, согласно Нотону, "железному занавесу" (это к вопросу о несостоятельности - первый вирус на Java появился еще в августе 1998);
  • отсутствие goto и так далее.
По поводу последнего из приведенных особенностей, мне каждый раз вспоминается пара предложений, которые у Нотона стояли в книге рядом:

В Java нет оператора goto... Оператор break в Java работает с метками.

Да, у оператора break с метками в Java имеются определенные особенности, ограничивающие его бесконтрольное применение, и все же у меня тогда прочтение приведенного текста вызвало отчетливое: "Хех! Ну вы, блин, даете"! В итоге, отчасти благодаря скептицизму, я не ушел на Java дальше пробы пера, так что наколдовал за всю свою программистскую жизнь лишь 2 791 строку кода на этом языке в трех десятках аплетов, среди которых были:
  • мини-программы для рисования;
  • динамические фильтры для изображений;
  • простейшие прыгающие надписи (с музычкой в формате AU!);
  • те самые электронные часики;
  • примитивная по интеллекту противника и графическому исполнению игра с компьютером в крестики-нолики (истинное мастерство игрока в нее проявляется не в выигрыше, а в способности проиграть или хотя бы свести к ничьей) и т.д.
Что касается пользы Java в ИТ-производстве, то тут вопросов уже нет - время уже все решило. Относительно этого языка в обучении, я думаю, что он вполне может выступать даже первым и основным - на его базе можно научить практически всем аспектам разработки приложений каких угодно типов (привет переносимости и универсальности), только нужно понимать, что программист, который получится в итоге, будет не тем же самым, который был обучен на базе "Паскаль + Ассемблер + Си + C++". Почему? Потому что примеры, на которых будет обучаться Java-программист, за пределами круга базовых, будут и должны быть, наверное, иными, концепции и парадигмы опять-таки за пределами базовых и их реализация однозначно будут иными (ну, самый простой пример - в Java отсутствует множественное наследование реализаций), книги и их авторы будут иными (со своим видением, так сказать). Java, вообще, стала одним из первых и первым мега-популярным языком, который ставил своей целью не только и не столько эффективность исполнения кода, но и удобство, простоту и заботу о программисте при одновременном наличии широчайших возможностей, а это - совершенно иной мир и иная доктрина.

Спору нет - хороший программист может изучить и второй, и пятый, и десятый язык, но программисты на всех языках, изученных ими после первого, пишут также как на этом первом, но в другом синтаксисе. Страуструп высказал это очень четко (правда, по поводу C++):

C++ поддерживает множество стилей программирования. Все они основаны на строгой проверке типов, и целью большей их части является достижение высокого уровня абстракции данных и непосредственного отображения идей программиста. Каждый стиль может эффективно достичь этих целей, в то же время обеспечивая эффективность выполнения и использования ресурсов. Программисты, приходящие из различных языковых сред (например, C, Fortran, Lisp, ML, Ada, Eiffel, Pascal или Modula-2), должны понять: для того чтобы воспользоваться преимуществами C++, необходимо потратить время на изучение и применение стилей программирования, приемлемых для C++. Тоже самое касается программистов, пользовавшихся более ранней и менее выразительной версией C++.

Бездумное применение в новом языке методов, эффективных в другом языке, обычно ведет к неуклюжему, медленному и сложному в сопровождении коду. Такой код к тому же еще и неприятно писать, потому что каждая строка кода и каждое сообщение компилятора об ошибке напоминает программисту, что используемый язык отличается от "старого языка". Вы можете писать в стиле Fortran, C, Smalltalk и т.п. на любом языке, но это и неприятно и неэкономично в языке с другой философией. Любой язык может послужить щедрым источником идей о том, как писать программы на C++. Однако для того, чтобы быть эффективным в новом контексте, эти идеи нужно трансформировать в нечто другое, более соответствующее общей структуре и системе типов C++. Над базовой системой типов возможны только пирровы победы. (Б.Страуструп "Язык программирования C++", 3-е изд. - СПб.: М.: "Невский диалект" - "Издательство БИНОМ"), 1999 г.)

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

суббота, 3 июля 2010 г.

Жизненный путь: Паскаль

С написанием программ я завязал в 2004 году. Последней программой стала разработанная в качестве расчетной для кандидатской диссертации. На время завязал или навсегда - не знаю, но, учитывая, что первую программу на Sinclair ZX Spectrum я написал в 7 лет в 1985 году (я знаю, что много раз об этом говорил, но еще неоднократно, наверное, об этом вспомню - горжусь), можно сказать, что у меня к 2004 году было 19 лет практики - не стыдно уже и переключиться на что-нибудь другое.

Давно хотел подвести некую черту, посчитать/вспомнить сколько и чего я создал за все эти годы. Начать решил с Паскаля. С этим языком я познакомился в 1995 году на первом курсе института, в который пришел с отличным знанием 8-ми диалектов Бейсика (gw, Q, Spectrum, Yamaha, БК - не помню, правда, какой именно диалект и т.д.), подозревая, что существуют и другие языки, но не имея опыта работы с ними.

Собственно, все лабораторные работы на первом курсе писались именно на Паскале (Borland Turbo Pascal 7.0). Объектно-ориентированным программированием на нем в моем исполнении разве что только "пахло" - было несколько небольших программ-примеров. Беготни и восторгов по поводу Delphi я не разделял. В свободное время тоже кое-что писалось (я разрывался между тягой к программированию и фанатизмом по установке и сносу Windows 95). По инерции на втором курсе было написано еще несколько программ на Паскале, после чего произошла смена курса - в жизнь пришли C/C++ (к сожалению, сразу вместе) и не желали покидать ее вплоть до 2004 года, смеясь в мозгу над всеми новомодными время от времени появлявшимися новыми языками.

Поскольку в общей сумме на Паскале было написано не так уж много, я взял за труд пересчитать все свои LOC (англ. Lines Of Code - строки кода) во всех файлах, которые смог найти. С ужасом предвижу, что будет, когда я дойду до C++ - там тысячи файлов, разбросанных по сотням каталогов за период в 10 лет. С Паскалем все было проще: программы в основном по одному файлу, под DOS, без излишеств в интерфейсах (зачастую интерфейсом служит командная строка), минимум адресной арифметики, чистые реализации придуманных или позаимствованных алгоритмов в разных комбинациях плюс обработка данных. Жизнь была куда проще, как мне кажется.

Именно по причине таких ясных и относительно простых взаимоотношений с Паскалем я до сих пор считаю его одним из лучших инструментов для обучения будущих программистов. Теоретически те же чистые, понятные лабораторки, предназначенные для формирования представления об алгоритмах и программах вообще, можно давать и на других языках, например, тех же C/C++. Но это теоретически, а на практике в этих языках любое взаимодействие даже с такими базовыми конструкциями, как строки и массивы, требует априорных знаний ("пререквизита") относительно архитектуры компьютера и адресной арифметики, что мне не кажется правильным - человека сначала надо увлечь, а пугать и мучить можно уже потом, когда подсядет. И, вдобавок, Паскаль в качестве первого языка программирования расширяет кругозор - от C/C++ программисту все равно никуда не деться, рано или поздно ему придется их изучить, но нехорошо, если окромя них он ничего в жизни не видел. Есть, конечно, и свои минусы в описанной мною практике, но сейчас не об этом.

При подсчете строк я, естественно, выкидывал пустые, а вот комментарии учитывал - не зря же я их писал в назидание себе и потомкам! Еще, думаю, стоит упомянуть, что в качестве стиля расстановки скобок и отступов я всегда использовал так называемый "расширенный стиль" или "стиль Олмана" (конечно, только с тех пор, как узнал, что такое отступы, что такое стиль в кодировании, выработал хоть какой-то свой и решил его придерживаться). Это важно, потому что стиль Олмана предполагает, например, размещение каждого оператора (begin/end) или операторной скобки в отдельной строке, что, естественно, увеличивает общее число строк.

Итак, в общей сложности я насчитал 21 366 строк кода на Паскале. Из них:
  • 11 778 строк - это, собственно, лабораторные работы по программированию (I курс, осень 1995 - июнь 1996 гг.);
  • 5 709 строк - это лабораторные работы по другим дисциплинам (периодически на протяжении обучения с 1995 по 2000 я решал, что все-таки стоит использовать Паскаль для программ, где не требуется интерфейс, которые по характеру являются чисто расчетными) например по таким, как:
    • "Физика" - работа по визуализации действия законов Брюстера и Маллюса;
    • "Формальные языки и формальные грамматики" - вычисление лишних правил в контекстно-чувствительных грамматиках;
    • "Анализ алгоритмов" - задача о восьми ферзях;
    • "Технология разработки ПО" - сейчас уже не могу ни вспомнить, ни понять, что именно это было, так странно оно выглядит;
    • "Оптимальное управление" - программа численного решения однопродуктовой задачи и т.д.;
  • оставшиеся 3 879 строк - это то что писалось для души, например:
    • шифровка и архивация файлов с применением бинарного дерева по методу Хаффмана;
    • всякая мелочь с применением Turbo Vision (хотя любая "мелочь" с применением Turbo Vision превращается в большую программу) - кто не знает, есть такая библиотека оконных классов для DOS (и в консольных окнах отлично работает), собственно, на ее основе реализованы пользовательские интерфейсы самого Turbo Pascal 7.0, других продуктов Borland и не только Borland той эпохи;
    • фракталы (посмотрел сейчас на них - ну и жуть);
    • модули общего назначения для отображения меню;
    • несколько программ для Windows на чистом Паскале и т.д.
Интересно копаться в старых программах - рекомендую. Иногда находятся весьма любопытные творения. Я, например, уже который год восхищаюсь своим опусом под названием chtoto.pas. Году так в 2001, если не изменяет память, я уже пытался вспомнить/понять, что же эта программа рисует. Основных версий было 2: то ли она визуализирует какие-то данные, то ли пытается вращать куб в странной проекции. Нужно сказать, что я писал ее на раннем жизненном этапе и, видимо, в расширенном сознании, потому что ни одного отступа в коде нет, ни одного комментария нет плюс программа объектно-ориентированная (по-моему, на Паскале она таковая чуть ли не единственная более-менее крупная, остальные так - "Hello world!"). Так вот тогда в 2001 я отчаялся, переименовал ее в chtoto.pas и забросил. C той поры я раз в год повторяю эту процедуру: открываю, смотрю, забрасываю. Традиция...