Игровой конструктор, часть 3. Иерархия классов и объектов
Продолжаем создавать по кирпичикам свою собственную игру. В прошлой статье мы прикрутили к трехмерному движку управление всеми мыслимыми и немыслимыми устройствами, а также разработали графический интерфейс. Напомню, что движок мы разpaбатываем с помощью Delphi и GLScene. Сегодня же мы займемся одним из самых важных моментов созданием иерархии классов и объектов движка, именно они лежат в фундаменте высокого игрового здания.
Ночной кошмар программиста
Прежде всего давайте выясним, зачем вообще нужна какая-то иерархия, система классов? Почему бы просто не писать движок, как пишется, и не заморачиваться какими-то иерархическими сложностями? Необходимо это для того, чтобы потом не было предельно сложно. В самой первой статье цикла я
|
Аналогия отнюдь не случайная. Разработка компьютерных игр процесс нелинейный. Как бы подробно не был написан дизайн-документ, уже в процессе работы над игрой в него придется вносить какие-то изменения, а значит переписывать уже написанный код или добавлять новое в модули, для этого не предназначенные. Причины могут быть самыми разными: дизайнеру или сценаристу неожиданно пришла в голову гениальная идея, которую надо непременно воплотить (тот факт, что для воплощения этой идеи надо переписать с нуля весь движок, обычно никого не волнует), изменилась конъюнктура рынка или используемые технологии уже устарели (они до релиза еще раз пять успеют устареть, но об этом мало кто задумывается на этом этапе).
Результат таких преобразований всегда один: непонятный код, состоящий из плохо стыкующихся кусков, странные баги, которые приходится отлавливать неделями, и бессчетные чашки кофе и упаковки димедрола, не способные более охладить кипящий разум всех программистов проекта. Но и это не самое страшное. Самое страшное потеря времени, а значит вновь умчавшиеся вперед технологии, вновь поменявшаяся конъюнктура рынка, и работу опять приходится начинать сначала.
Всего этого можно если не избежать, то по крайней мере скомпенсировать четкой и удобной иерархией классов и объектов игры. Тогда программисты смогут встраивать в игровой код любой степени завершенности новые возможности без опаски, что после этого работа пойдет наперекосяк.
По кирпичику да целый дом! Кирпичный дом значительно легче разобрать и переделать, чем какой-нибудь дворец с железобетонными элементами, отлитыми по спецзаказу. Такая гибкость нужна не только в строительстве домов, но и в строительстве трехмерных движков...
|
Первый, второй, десятый...
|
Одновременно может существовать только один объект этого класса, так как и игровой движок у нас один. Есть исключения, например dedicated сетевые серверные движки, но они и строятся по другим принципам. Особого смысла в реализации класса TEngine в нашем случае нет. Вы можете создать его как организующий элемент, чтобы вся система была стройной и однозначной. Но особой смысловой нагрузки он нести не будет. Ведь список объектов и все действия с ними “держит” класс TGLScene. Он в какой-то мере и будет самым верхним классом иерархии. Остальные поля и методы движка реализуйте как обычные переменные и методы главной формы.
Теперь разберемся с другими классами. Если вы плохо представляете себе структуру будущего движка, можете воспользоваться очень простой методикой. Напишите на листочке все игровые объекты в любом порядке (предметы, окружение, героев, любые другие объекты). Под каждым напишите список его свойств и методов. К примеру, какие поля могут быть у объекта Тролль в простом 3D-action? Жизни, броня (если есть), тип оружия, мана и доступные заклинания. А методы у него могут быть такими: Идти (в качестве параметра “направление”), Идти к (в качестве параметра “конечная точка”, здесь пригодятся алгоритмы поиска путей, о которых мы поговорим в одной из следующих статей цикла), Ударить (тип оружия или магии), Искусственный интеллект, Проверить столкновение с объектом (об этом мы также поговорим в одной из следующих статей ).
После того как вы распишите таким образом каждый игровой объект, вы обязательно заметите, что у многих объектов есть общие поля и методы. К примеру, поле Жизнь есть у всех живых существ, а поле Мана только у тех, кто обладает магией. А вот метод Проверить столкновение с объектом есть не только у живых существ, но и у многих неживых, но движущихся. К примеру, он будет у стрелы и у камня, если его можно метать. Если у группы классов есть одинаковые свойства и методы, в их основу надо положить отдельный подкласс.
Для тех, кто еще не очень хорошо ориентируется в наследовании классов, приведу код, который отражает эту иерархию в Дельфи. Естественно, все названия и тонкости реализации гипотетические. В вашем случае они могут быть совсем другими. Однако общий принцип прослеживается.
|
procedure CheckCollision(obj: TMovable); virtual;
end;
TLifeObject=class(TMovable)
procedure Go(direction:TDirection); virtual;
procedure GoTo(obj:TObject); virtual;
procedure AI; virtual;
public
life:integer;
end;
TBattleCharacter=class(TLifeObject)
procedure Attack(obj: TLifeObject); virtual;
end;
TMage=class(TBattleCharacter)
public
mana:integer;
end;
TTroll=class(TMage)
procedure CheckCollision(obj: TMovable); override;
procedure Go(direction:TDirection); override;
procedure GoTo(obj:TObject); override;
procedure AI; override;
procedure Attack(obj: TLifeObject); override;
end;
TAmmo= class(TMovable)
public
speed:integer;
attacktype:TAttackType;
power:integer;
end;
|
procedure CheckCollision(obj: TMovable); override;
end;
TSheep=class(TLifeObject)
procedure CheckCollision(obj: TMovable); override;
procedure Go(direction:TDirection); override;
procedure GoTo(obj:TObject); override;
procedure AI; override;
end;
TOrk=class(TBattleCharacter)
procedure CheckCollision(obj: TMovable); override
procedure Go(direction:TDirection); override;
procedure GoTo(obj:TObject); override;
procedure AI; override;
procedure attack(obj: TLifeObject) override;
end;
У каждого конкретного движка своя собственная, совершенно неповторимая система иерархии. Но... Есть несколько общих принципов создания удобной иерархии, которые используются разработчиками во всех качественных движках. При построении собственного игрового “двигателя” обязательно нужно иметь их в виду. ПРИНЦИП ПЕРВЫЙ. Если два класса, относящиеся к разным базовым классам, имеют одинаковые по смыслу и реализации свойства или методы, значит, вы что-то не так сделали. Необходимо пересмотреть всю систему и сделать ее не избыточной. ПРИНЦИП ВТОРОЙ. Пользуйтесь замечательным правилом Бритвы Оккама: не плодите сущностей сверх необходимости. Например, не стоит объединять всех игровых персонажей с зеленой чешуей в отдельный класс, основным отличием которого является свойство зеленочешуйчатости. Если только это свойство не ключевое для игры. ПРИНЦИП ТРЕТИЙ. Представьте себе, что вам нужно добавить в вашу игру: гиппогрифа, чемодан, танк со сменными колесами, всем живым существам признак наркотического отравления, изменить у всех объектов проверку столкновений с боксовой на полигональную. Если все эти вещи вы сможете сделать без изменения структуры иерархии значит, вы все сделали правильно. |
Полцарства за наследника
В коде, который мы только что рассмотрели, все методы, объявленные в родительском классе, переобъявляются в финальных классах. Причем в
|
Возьмем для примера метод Attack, который есть у тролля и у орка. Если подумать, реализация этого метода должна быть для них разной. Ведь орк атакует оружием, а тролль не только оружием, но и магией. Допустим, по нашей задумке тролль всегда атакует противника магией на дальних дистанциях, а оружием на ближних. Орк атакует только оружием на ближних дистанциях. В реализации метода Attack для этих двух персонажей будет общая часть (атака оружием) и части различные. Можно также сказать, что на ближних дистанциях тролль ничем не отличается от орка. Тогда атаку обычным оружием мы реализуем в методе Attack у родительского класса орка TBattleCharacter, а атаку магией реализуем в родительском классе тролля TMage. Причем у всех потомков TMage будет возможность драться как магией (так как эта возможность заложена в сам этот класс), так и обычным оружием (так как эта возможность присутствует у одного из предков TBattleCharacter). Допустим, метод Attack у TBattleCharacter уже реализован. Тогда метод Attack у всех магов, в том числе и у тролля, может выглядеть так:
|
begin
if DistanceTo(obj.AbsolutePosition)>100 then
AttackAsMage(obj); {атакуем магией}
else inherited Attack(obj);
end;
Предполагается, что AttackAsMage уже реализован. Обратите внимание на ключевое слово inherited перед повторным вызовом метода Attack. Это не рекурсия, как вы могли подумать, то есть метод не вызывает сам себя. Ключевое слово inherited указывает на то, что мы должны вызвать метод предка этого класса. Еще раз посмотрите на объявление метода Attack у класса TBattleCharacter и TTroll. Метод у TBattleCharacter помечен словом virtual, то есть он виртуальный, его можно перегрузить. Метод у TTroll помечен словом override, что и обозначает перегрузку. Итак, все эти три ключевых слова: virtual, override и inherited позволяют организовать иерархическое дерево методов. Таким образом, с помощью иерархии классов мы можем дать объектам не только общие свойства, но и общие участки кода, отвечающие за
|
Есть еще одно ключевое слово из этой же категории abstract. Если его поставить после объявления метода, который вы собираетесь перегружать, для него вообще не нужна реализация. То есть в классе будет только название метода, и больше ничего. Ну а его реализация или каскад реализаций вы сможете написать в классах-потомках.
У иерархической модели методов есть одно замечательное свойство, которое на первый взгляд неочевидно. На деле же это один из удобнейших приемов в объектно-ориентированном программировании. Рассмотрим все тот же пример с троллем и орком. Допустим, вы пишите искусственный интеллект для группы разных боевых существ. В какой-то момент игрок выделил рамкой свое могучее воинство и послал его в туманную даль бить врагов. В обычном случае вам придется для каждого существа в отряде вызывать метод Attack. Но так как эти существа принадлежат десяткам разных классов, вам придется повторить это действие для каждого типа существ в отдельности! А вот как этого же можно добиться с нашей системой. Предположим, что Creatures это список всех существ нашего отряда.
For x:=1 to Creatures.Count do (Creatures[x] as TBattleCharacter).Attack(obj)
Всего одна строчка! Игра берет самый первый объект списка Creatures, приводит его к классу TBattleCharacter (мы имеем полное право так сделать, потому что все объекты нашего списка являются потомками TBattleCharacter в том или ином поколении), и у приведенного объекта вызываем метод Attack. Далее игра для каждого типа объектов проходит вверх по дереву его предков, доходит до него самого и вызывает его личный метод Attack. То есть эта строчка вызовет разные методы Attack для тролля и орка. Каждому свой. Мораль: тщательно планируйте иерархию классов, чтобы однотипный код перекрывался на разных уровнях дерева классов. Тогда несколькими строчками кода вы сможете сделать столько всего, на что при обычном подходе ушла бы не одна страница.
Перепишем всех! Когда мы посылали все могучее виртуальное воинство на бой одной единственной строчкой, то использовали в ней список Creatures. В нем хранятся все игровые персонажи. Давайте разберемся, что это за звери такие списки. Списки вещь это крайне удобная. В них можно хранить любые объекты любых классов и оперативно получать к ним доступ, сортировать по какому-то критерию, перебирать... За списки вообще в Delphi отвечает класс TList. Есть несколько классов для специфических списков, но нам они пока не интересны. Вот как можно объявить список Creatures: Var Creatures:TList; Теперь с помощью комaнды Add можно добавить в список элементы. Например, у нас есть объект Troll класса TTroll. Тогда следующей строчкой мы добавим его в список: Creatures.Add(Troll); А вот так мы достанем его из списка, зная его индекс x: (Creatures[x] as TTroll) Ключевое слово as универсальный преобразователь типов. Однако пользуйтесь им только тогда, когда точно уверены, что преобразуемые типы совместимы. Например, находятся в связи предок-потомок. Если вы попробуете привести один тип к другому, совершенно с ним не совместимому, ничего хорошего не выйдет. Зная индекс элемента, можно удалить его из списка: Creatures.Delete(x); Ну а что делать, если у вас есть объект и вы хотите получить его индекс в списке? Воспользуйтесь этой комaндой: x:=Creatures.IndexOf(Troll); После выполнения этой строчки в x окажется индекс объекта Troll. Количество элементов в списке можно прочитать из его свойства Count. Как перебирать все объекты списка, вы уже знаете. Напоследок одно важное замечание. В списке не хранятся сами объекты, а только указатели на них. Все манипуляции с элементами (добавление, удаление, сортировка) никак не отражаются на самих объектах. То есть списки просто удобный инструмент для структурированного хранения информации. |
Иерархия GLScene
Принципы, изложенные выше, активно использовали разработчики GLScene. Эта графическая библиотека имеет крайне продуманную и удобную иерархию классов. Причем дерево классов довольно развесисто. Самые длинные цепочки наследования содержат до десяти уровней! А базовых классов, над которыми строятся все остальные, не больше десятка (всего классов больше трехсот!). Давайте рассмотрим несколько наиболее интересных ветвей этого могучего дерева. Это поможет лучше понять принципы наследования. Кроме того, многие родительские классы тех классов, которыми мы часто пользуемся, интересны и сами по себе. С их помощью можно реализовать многие вещи, недоступные на самом верхнем уровне иерархии.
|
Давайте от TGLUpdateAbleComponent свернем в другую сторону к классу-потомку TGLBaseSceneObject. Это базовый класс для всех видимых и многих невидимых классов GLScene. Он добавляет к предыдущим классам целую гроздь важнейших свойств и методов: динамическое изменение иерархии, понятие координат, векторы направления, поворота, масштабирования, сортировка и множество геометрических операций, например расстояние до другого объекта, и многое другое. Если вы хотите написать свой собственный компонент для GLScene (а рано или поздно такая потребность у вас обязательно возникнет), начинать надо именно отсюда.
|
TGLFreeForm класс, реализующий весь функционал предыдущих классов, который позволяет вам загружать и использовать в GLScene объекты многих форматов трехмерной графики, например популярного пакета 3D Studio. Именно он поможет нам создать большинство статичных (неанимированных) объектов дома и деревья, столы и стулья, камни и космические корабли.
Мы проделали долгий путь, но он окупился сторицей. По пути мы миновали множество развилок. Если бы мы хоть раз свернули, то пришли бы к совсем другому объекту. Как только освоитесь с GLScene, обязательно загляните в его исходники это настоящий кладезь мудрости и интересных приемов программирования.
И напоследок важнейший совет. Когда будете строить свою систему иерархии, все визуальные объекты делайте надстройками над классами GLScene. То есть вы как бы сажаете сверху пирамиды GLScene пирамидку своего трехмерного движка. Так они смогут работать в тесной связке, максимально эффективно. Так вы сможете писать гораздо меньше кода. Например, если вам нужно создать классы для тех же статичных объектов, делайте их общего родителя потомком TGLFreeForm. А если вы хотите создать классы анимированных объектов, обратите внимание на стандартный класс TActor. Я верю: когда код вашего движка и код GLScene сольются в едином экстазе, на свет появится Игра с большой буквы.
Динамические массивы В Delphi есть и другие способы структурированного хранения информации. Списки вещь замечательная, но только если вы работаете с классами. Конечно, в список можно добавить любой объект, любую переменную, а точнее указатель на них. Но вот работать с ними так же просто не выйдет. Вам придется работать с указателями. Ничего сложного в этом нет, но, по статистике, именно в кусках кода, связанных с указателями, начинающие программисты делают максимальное количество ошибок. Но есть другой способ хранить информацию в одном месте. Способ этот идеально подходит для структур и переменных одного типа. Это динамические массивы. С обычными массивами вы уже знакомы. Динамические массивы то же самое по сути, но вот число элементов в них может быть любым. Оно также может меняться во время работы программы. Объявляется динамический массив не просто, а очень просто: Var A:array of integer; Вот так мы объявили динамический массив A из целых чисел. Изначально его длина равна нулю. Чтобы добавлять в него элементы, вам для начала нужно расширить его до необходимых размеров. Вот как это делается: SetLength(A,10); Так мы выделили память под 10 элементов. Работайте с ячейками этого массива точно так же, как и с ячейками обычного, например: A[1]:=5; Не забудьте только, что у динамических массивов индекс первого элемента равен нулю, а последний на единицу меньше длины. Кстати, о длине. Получить ее можно с помощью комaнды Length. Например, так вы сможете заполнить весь массив одинаковым значением: For x:=0 to Length(A)-1 do A[x]:=5; В отличие от списка, в динамическом массиве хранятся не ссылки на значения, а сами значения. И они никак не связаны с тем местом, откуда вы их получили. Например, после выполнения строчки A[0]:=B; переменная B и первая ячейка массива A будут иметь одинаковое значение, но жить будут совершенно независимо. Вы можете также объявить многомерный динамический массив, например так: A:array of array of array of integer; Это трехмерный массив целых чисел. Так его можно проинициализировать: SetLength(A,10,20,30); Ну а так получить доступ к конкретной ячейке: A[1,2,3]:=5; В целом динамические массивы крайне удобный контейнер для хранения однотипной информации. |
* * *
Мы слепили еще один кирпичик нашей игры. В следующем номере вы узнаете то, что хорошо бы знать маститым разработчикам игр самых разных жанров, но прежде всего стратегий реального времени: как правильно искать пути. Чтобы колесницы, отправляясь из Африки в Европу, не попали ненароком в Антарктиду, а какодемон не запутался в четырех стенах подземелья и не проворонил жаждущего его убить героя.
На наших CD/DVD На наших дисках выложена последняя версия движка GLScene. |
«…Deponia живописует классическую киберпанковскую диалектику: одни живут на свалке металлолома и мечтают о лучшей жизни, другие наслаждаются футуристическими благами в парящих над отбросами городах. И когда кто-то оттуда падает вниз, начинается самое инте...
28 04 2024 7:30:30
«…Любой наблюдаемый объект в игре — осязаемый. Если в GTA 4 пролетающие над городом самолеты выполняли чисто декоративную функцию, то в JC2 любой летательный аппарат можно догнать, зацепить крюком, запрыгнуть на борт и выкинуть пилота из кабины... В игре...
27 04 2024 13:15:42
«…Управление разными видами военной техники, огромные открытые прострaнcтва (в том числе и морские), свободное развитие миссий — все это нам знакомо по ArmA 2. Но ведь не каждый день выходят игры с авианосцем (или хотя бы авианесущим крейсером) в главной...
26 04 2024 14:45:24
Под конец недели мы подготовили для вас порцию отличного косплея по известным играм, а также комиксам DC и Marvel. Hearthstone, The Witcher 3, Final Fantasy XV, Tekken 6 и неизменный Overwatch — всё это и немного…|Игромания...
25 04 2024 12:49:16
«первый в мире многопользовательский казуальный шутер», как его назвал Олег Ставицкий, казуальным является не потому, что он предельно прост. Дружелюбность — вот определяющее слово, на которое ставят DICE. Вся игра строится на пожел...
24 04 2024 16:47:24
Мы продолжаем вспоминать наши любимые игровые саундтреки за двадцать лет существования журнала. Мы уже рассказали вам про годы 1997—2002, 2003—2007, 2008—2012, и теперь пришла пора закончить наш музыкальный парад.…|Игромания...
23 04 2024 0:49:25
Наверное, каждый второй поклонник Metal Gear Solid в прошлом году получил микроинфаркт, когда Хидео Кодзима анонсировал пятую, каноническую (по его собственным словам), часть сериала не для мощной PlayStation 3, а для слабенькой PlayStation…|Игромания...
22 04 2024 5:52:58
...решает эту проблему одним махом, устанавливая на компьютер все кампании и миссии для «Ил-2», когда-либо выходившие из-под крыла 1С. От своей «золотой» предшественницы «Платиновая коллекция» отличается наличием двух н...
21 04 2024 11:10:21
«…Orcs Must Die! держит в тонусе до самых титров. Здесь постоянно куда-нибудь бежишь, в кого-нибудь стреляешь, что-то строишь, ломаешь, крутишь, вертишь, совмещаешь или комбинируешь. Кого-нибудь жжешь, морозишь, травишь грибами или топишь в лаве…»...
20 04 2024 2:10:11
Vampire: The Masquerade — Bloodlines 2 — одна из самых ожидаемых ролевых игр следующего года. Оригинал, увидевший свет ещё в 2004 году, хоть и был несколько недоделанным, всё равно на годы запомнился публике проработкой мира,…|Игромания...
19 04 2024 23:33:51
Первые поединки на выбивание стартовали поздно ночью седьмого августа. С них мы и начнем. О перипетиях группового этапа The International 3 мы уже рассказывали в одном из наших предыдущих материалов, поэтому, прежде чем читать дальше, советуем…|Игромания...
18 04 2024 5:17:20
Данная игра – это продолжение одного из лучших гоночных симуляторов «Need For Speed», завоевавшего в свое время первые места во многих хит-парадах. Для тысяч гeймеров слова «Need for Speed» стали синонимом азapта, желания играть без конца,...
17 04 2024 3:32:54
Читайте также: Лучшая игра 2012 | Лучшие по жанрам, часть 2 | Спецноминации Боевик года Far Cry 3 Что же такое безумие? Чем дольше…|Игромания...
16 04 2024 16:11:42
С помощью радиоприёмника или спиритической доски можно задавать вопросы паранормальным сущностям. При этом важно подбирать правильные слова, которые игра сможет воспринять. В этом гайде приводим список фраз, которые помогут начинающим и опытным…|Игромания...
15 04 2024 17:40:46
«…Всех нас рано или поздно достает гул корпусных вентиляторов. И если во время игры, когда колонки включены на полную, его не замечаешь, то терпеть его во время работы нет никаких сил. К счастью, проблема решаема: в продаже есть масса регуляторов для верт...
14 04 2024 17:48:36
Eidos —компания, создавшая самый грудастый игровой бренд на свете, собирается в очередной раз поселить на наших винчестерах бессменную гробокопательницу Лару Крофт. Это будет седьмая по счету реинкарнация популярной...
13 04 2024 2:29:59
«…Crytek неплохо отработали тематику, сделав ставку на реализм и жестокость, и придумали несколько впечатляющих эпизодов, равномерно раскидав их по игре. Но в промежутках между ними игровой процесс навевает тоску. Если в продолжении (а это, уверены, вопро...
12 04 2024 12:21:28
Вся суть Mushroom Wars — в трех мимолетных секундах перед началом сражения. Номинально это стратегия, но последние мгновения затишья напоминают скорее старт решающей гонки в Need for Speed: Shift. В глазах у игроков — спортивный азapт,…|Игромания...
11 04 2024 21:48:40
Важнейшим источником вдохновения стал болезненный разрыв с дeвyшкой, которая бросила меня после пяти лет отношений. То, что задавало курс моей жизни, внезапно исчезло. Я посчитал, что из этого ощущения — чувства утраты жизненного стержня &...
10 04 2024 11:40:53
«…Первая же синтетика, 3DMark Vantage, выдала видеокартам 28 557 очков. В свое время на аналогичной машине GTX 580 набирала «всего» 22 468 баллов. Дальше — больше. Злейший враг всех видеокарт, Unigine Heaven Benchmark 2.0, показал на двух GTX 560 Ti резул...
09 04 2024 16:15:39
Всплывшие буквально на днях в сети системные требования Assassin’s Creed: Unity заставили интернет взбурлить. О чем думают разработчики?! Где оптимизация?! Не лучше ли и правда купить себе консоль — всяко дешевле обойдется, чем апгрейд…|Игромания...
08 04 2024 1:12:38
Если вы читали моё превью Ghost of a Tale в раннем доступе, то знаете, какие большие надежды я возлагала на эту игру. В ней всё было настолько хорошо, что даже не верилось: неужели подобное чудо способна выпустить крохотная студия SeithCG? И вот…|Игромания...
07 04 2024 8:57:25
...может даже показаться, что это не что иное, как «Виста». Конечно, новых возможностей программа системе не добавляет: это тот же XP, только подкрашенный. Но все же...В нашем обзоре: Vista Transformation Pack, Flyakite OSX, ObjectDock, Yahoo!...
06 04 2024 21:26:15
Дейенерис Таргариен — «Игра престолов» В нашем косплейном дайджесте в этот раз сразу несколько персонажей из «Игры престолов». Что, правда, очень кстати, так как и новый сезон, и новую книгу мы…|Игромания...
05 04 2024 23:37:33
Потому что игра "Ну, погоди! Выпуск 1" представляет собой совершенно тупую платформенную аркаду с нулевым гeймплеем. И это при том, что как раз "платформеры" всегда были невероятно сильны по части увлекательного гeймплея — вспомните Aladdin, Lion King или...
04 04 2024 0:37:27
чтобы вы совсем уж уверились в собственной безнаказанности, враги в игре сделаны феноменально глупыми. Конечно, трудно ожидать тактических изысков от неандертальцев, но эти ребята — ходячее доказательство теории естественного отбора: регулярно...
03 04 2024 22:19:36
«…Самый кровавый файтинг современности стал еще лучше. Графика, которую выдает миниатюрная «Вита», пpaктически не уступает версиям с больших консолей, а хруст ломаемых костей звучит так же задорно. Вдобавок в портативной версии был доработан баланс поедин...
02 04 2024 20:13:38
Не только поклонники Нэнси Дрю, но и взрослые любители квестов, не без оснований считающие продукты Her Interactive халтурой, должны присмотреться к новой части сериала. Очевидно, в преддверии выхода на экраны фильма о молодой сыщице студия ре...
01 04 2024 14:17:37
За время существования Minecraft для неё создали столько модов, что игра может на равных потягаться с «зубрами» всей игровой индустрии: Skyrim, Grand Theft Auto V и даже Garry’s Mod. Только на CurseForge, крупнейшем…|Игромания...
31 03 2024 5:54:13
В 1966 году начинающий режиссер Вуди Аллен из озорства перемонтировал и переозвучил серьезный японский боевик International Secret Police, подменив шпионский сюжет жизнерадостным бредом о пропаже рецепта яичного салата и выпустив все это под…|Игромания...
30 03 2024 7:37:20
Каждый любитель ролевых игр знает, что такое “Готика”. Всем же остальным поясним: это — одна из лучших RPG с невиданной свободой действий, отличным сюжетом, интересными заданиями и длинными разветвленными диалогами....
29 03 2024 6:19:16
Три дня в шумовой обстановке, близкой к болевому шоку. Пятьдесят интервью, сотни показов, пять пресс-конференций и десять игрKing’s Bounty. Легенда о рыцаре (...вылизана, продумана и оформлена так, что на секунду забываешь, как тебя зовут...)Spore (...
28 03 2024 3:39:33
компьютеры задействовали в военных целях — для изучения термоядерных реакций, расчета баллистических траекторий paкет и так далее. В 1956 году Лебедев выступил с докладом на конференции в западногерманском городе Дармштадте. Академик устроил пе...
27 03 2024 4:40:41
Cities XL Издатель/издатель в России: Monte Cristo/Акелла Разработчик: Monte Cristo Рейтинг: 8,0 Полная рецензия в «Игромании» №12/2009 В студии Monte Cristo работают какие-то удивительно упрямые люди. Последние несколько лет…|Игромания...
26 03 2024 7:56:11
Предупреждение: Все игры выбирались внутриредакционным голосованием. Если вашего любимого проекта в списке нет, это не означает, что мы про него забыли, — ему просто не хватило голосов. Half-Life 2 Вторая Half-Life — одна из тех…|Игромания...
25 03 2024 13:52:43
Компания Codemasters получила известность еще в 80-х, доказав, что спортивные симуляторы могут быть не только качественными и разнообразными, но и динамичными, доступными гeймерским массам. Колин МакРей прославился в 1995-м, став самым юным чемпио...
24 03 2024 2:46:40
очень сложно ткнуть пальцем и назвать в этой, безусловно, увлекательной дуэли победителя. Codemasters бравируют бюджетом, масштабом и сэндбоксом. Bohemia Interactive явно берут нюансами: общение с бабушкой в серьезном военном шутере — интригующая эк...
23 03 2024 14:53:57
«…из недр TYTAN раздается хаpaктерный визг электромоторчиков, боковые стенки плавно отделяются от своих мест, поднимается задняя часть крыши, корпус увеличивается в размерах и ощеривается восемью вентиляторами. Реакция друга — шок, восторг и неизменный во...
22 03 2024 23:29:54
О номинации: многие боевики с самого начала крепко хватают нас за руку и ведут через сюжетные сцены, пальцем указывая, куда смотреть и чем восхищаться. Доля свободы в них если и есть, то строго по расписанию и небольшими дозами. Но некоторые проекты…|Игромания...
21 03 2024 3:44:29
Представляем вашему вниманию обновленный сводный список отечественных локализаций и проектов. Данная таблица состоит из двух разделов, которые, в свою очередь, разделяются на подразделы: 1)ПОСТУПИЛИ В ПРОДАЖУ. Сюда помещаются все те игры...
20 03 2024 11:31:47
Словацкая Mayhem Studios занята благородным в общем-то делом: на протяжении долгих лет с завидным упорством несет в массы (в основном восточно-европейские) специфическую культуру пошаговых ролевых игр и стратегий. В основном посредством клониро...
19 03 2024 3:49:34
World War 2 Combat: Iwo Jima поначалу вводит в ступор. Первая мысль примерно такая: «Елки-палки, неужели возможно сделать настолько плохую игру?» Даже невольно проникаешься уважением к разработчику и издателю: чтобы выпустить такое на рынок (да еще и по...
18 03 2024 15:50:38
...Начнем с концепции. Преследование в разных эпохах полоумных террористов, которые удумали изменить ход времени, — это, безусловно, внушает. Не очень, правда, понятно: речь идет о здоровом абсурдном юморе или о серьезной исторической теории?.....
17 03 2024 21:37:52
«…Если раньше головной болью для игроков была лишь труднопроходимая местность плюс иногда стада диких животных вроде бизонов или антилоп гну, то теперь попытка проскочить к финишу через рельсы чревата встречей с поездом, а заехав на возвышенность во время...
16 03 2024 23:28:48
Самым существенным отличием в четвертой редакции стала магия. Больше нет старой системы запоминания (memorize) и прогрессии заклинаний. Теперь все они делятся на четыре вида, по частоте применения: всегда используемые, раз в бой, раз в день и «ритуа...
15 03 2024 17:55:51
Казалось бы, инди-квесту для успеха нужно немногое. Напиши цепляющую историю, дополни логичными загадками и сносной картинкой — и выйдет если не хит, то как минимум добротный представитель жанра. Но The Great Perhaps от отечественной…|Игромания...
14 03 2024 3:52:58
Светлана Померанцева Всем привет и чмоки-чмоки. Не пугайтесь, я не превратилась в каноническую блондинку с туповатым взглядом и надменным видом. Просто у меня очень хорошее настроение. Буквально пару часов назад, прямо перед тем, как мы с Алексеем…|Игромания...
13 03 2024 9:50:40
Microsoft — один из немногих игровых гигантов, которые все ещё проводят пресс-конференции на gamescom. «Прессухи» на выставке в Кёльне — умирающий формат, настоящий олдскул. А в этот раз ещё и смотреть было…|Игромания...
12 03 2024 17:43:41
...мы знаем, как делать хорошие гонки. Наша игра, как я уже говорила, строится на законах реальной жизни, поэтому у нас не будет пришитых белыми нитками автомобильных уровней. Но вам придется использовать машины, чтобы добраться в нужную точку или чтобы д...
11 03 2024 10:29:58
 Выход Warcraft III: The Frozen Throne стал событием поистине мирового значения. Новые герои, новые юниты, новые возможности и мощно измененная тактика игры за каждую расу — вот что такое Warcraft III: The Frozen Throne. В этой статье…|Игромания...
10 03 2024 0:46:29
Еще:
Игры -1 :: Игры -2 :: Игры -3 :: Игры -4 :: Игры -5 :: Игры -6 :: Игры -7 :: Игры -8 :: Игры -9 :: Игры -10 :: Игры -11 :: Игры -12 :: Игры -13 :: Игры -14 :: Игры -15 :: Игры -16 :: Игры -17 :: Игры -18 :: Игры -19 :: Игры -20 :: Игры -21 :: Игры -22 :: Игры -23 :: Игры -24 :: Игры -25 :: Игры -26 :: Игры -27 :: Игры -28 :: Игры -29 :: Игры -30 :: Игры -31 :: Игры -32 :: Игры -33 :: Игры -34 :: Игры -35 :: Игры -36 :: Игры -37 :: Игры -38 :: Игры -39 :: Игры -40 :: Игры -41 :: Игры -42 :: Игры -43 :: Игры -44 :: Игры -45 :: Игры -46 :: Игры -47 :: Игры -48 :: Игры -49 :: Игры -50 :: Игры -51 :: Игры -52 :: Игры -53 :: Игры -54 ::