Игровой конструктор, часть 3. Иерархия классов и объектов > Minecraft истории
истории Minecraft    

Игровой конструктор, часть 3. Иерархия классов и объектов

Игровой конструктор, часть 3. Иерархия классов и объектов

Самопал Игровой конструктор, часть 3. Иерархия классов и объектов 022.12.2004 02:11  |  Если вы плохо представляете себе структуру будущего движка, можете воспользоваться очень простой методикой. Напишите на листочке все игровые объекты в любом порядке (предметы, окружение, героев, любые другие объекты). Под каждым напишите список его свойст Самопал
    Продолжаем создавать по кирпичикам свою собственную игру. В прошлой статье мы прикрутили к трехмерному движку управление всеми мыслимыми и немыслимыми устройствами, а также разработали графический интерфейс. Напомню, что движок мы разpaбатываем с помощью Delphi и GLScene. Сегодня же мы займемся одним из самых важных моментов созданием иерархии классов и объектов движка, именно они лежат в фундаменте высокого игрового здания.

    Ночной кошмар программиста
   
Прежде всего давайте выясним, зачем вообще нужна какая-то иерархия, система классов? Почему бы просто не писать движок, как пишется, и не заморачиваться какими-то иерархическими сложностями? Необходимо это для того, чтобы потом не было предельно сложно. В самой первой статье цикла я
На этой странице справки
GLScene содержатся ссылки
на краткие спецификации всех
его классов.
привел пример с домом и кирпичами. Мы выяснили, что игровые движки лучше разбивать на независимые модули. Можно продолжить эту аналогию. Допустим, вы строите крупнопанельный дом, и вашему начальству пришло в голову панели сделать ну очень крупными: размерами в несколько этажей, да еще и сложной формы. Соседний дом строится по старинке, из кирпичей. Вдруг высшее начальство решило, что дома должны расти не ввысь, а вширь. Какое здание будет проще переделать под новый стандарт? Ясно, что кирпичное, так как там элементы гораздо меньше, и они могут свободно сопрягаться друг с другом.
    Аналогия отнюдь не случайная. Разработка компьютерных игр процесс нелинейный. Как бы подробно не был написан дизайн-документ, уже в процессе работы над игрой в него придется вносить какие-то изменения, а значит переписывать уже написанный код или добавлять новое в модули, для этого не предназначенные. Причины могут быть самыми разными: дизайнеру или сценаристу неожиданно пришла в голову гениальная идея, которую надо непременно воплотить (тот факт, что для воплощения этой идеи надо переписать с нуля весь движок, обычно никого не волнует), изменилась конъюнктура рынка или используемые технологии уже устарели (они до релиза еще раз пять успеют устареть, но об этом мало кто задумывается на этом этапе).
    Результат таких преобразований всегда один: непонятный код, состоящий из плохо стыкующихся кусков, странные баги, которые приходится отлавливать неделями, и бессчетные чашки кофе и упаковки димедрола, не способные более охладить кипящий разум всех программистов проекта. Но и это не самое страшное. Самое страшное потеря времени, а значит вновь умчавшиеся вперед технологии, вновь поменявшаяся конъюнктура рынка, и работу опять приходится начинать сначала.
    Всего этого можно если не избежать, то по крайней мере скомпенсировать четкой и удобной иерархией классов и объектов игры. Тогда программисты смогут встраивать в игровой код любой степени завершенности новые возможности без опаски, что после этого работа пойдет наперекосяк.

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

    Первый, второй, десятый...
Если дважды кликнуть по
значку GLScene на форме,
можно увидеть такую картину.
Не перепутайте: это вовсе не
дерево доступных классов, а
дерево объектов, уже
находящихся в сцене.
    Давайте решим, как именно будет выглядеть иерархия игровых классов. Во многих играх самый главный и самый верхний класс TEngine, который описывает графический движок в целом. В нем хранится список всех игровых объектов и вспомогательная игровая информация глобального масштаба (например номер уровня, настройки графики). Он также представляет общеигровые методы, например Загрузить игру, Перейти на уровень, Сохранить игру и многие другие.
    Одновременно может существовать только один объект этого класса, так как и игровой движок у нас один. Есть исключения, например dedicated сетевые серверные движки, но они и строятся по другим принципам. Особого смысла в реализации класса TEngine в нашем случае нет. Вы можете создать его как организующий элемент, чтобы вся система была стройной и однозначной. Но особой смысловой нагрузки он нести не будет. Ведь список объектов и все действия с ними “держит” класс TGLScene. Он в какой-то мере и будет самым верхним классом иерархии. Остальные поля и методы движка реализуйте как обычные переменные и методы главной формы.
    Теперь разберемся с другими классами. Если вы плохо представляете себе структуру будущего движка, можете воспользоваться очень простой методикой. Напишите на листочке все игровые объекты в любом порядке (предметы, окружение, героев, любые другие объекты). Под каждым напишите список его свойств и методов. К примеру, какие поля могут быть у объекта Тролль в простом 3D-action? Жизни, броня (если есть), тип оружия, мана и доступные заклинания. А методы у него могут быть такими: Идти (в качестве параметра “направление”), Идти к (в качестве параметра “конечная точка”, здесь пригодятся алгоритмы поиска путей, о которых мы поговорим в одной из следующих статей цикла), Ударить (тип оружия или магии), Искусственный интеллект, Проверить столкновение с объектом (об этом мы также поговорим в одной из следующих статей ).
    После того как вы распишите таким образом каждый игровой объект, вы обязательно заметите, что у многих объектов есть общие поля и методы. К примеру, поле Жизнь есть у всех живых существ, а поле Мана только у тех, кто обладает магией. А вот метод Проверить столкновение с объектом есть не только у живых существ, но и у многих неживых, но движущихся. К примеру, он будет у стрелы и у камня, если его можно метать. Если у группы классов есть одинаковые свойства и методы, в их основу надо положить отдельный подкласс.
    Для тех, кто еще не очень хорошо ориентируется в наследовании классов, приведу код, который отражает эту иерархию в Дельфи. Естественно, все названия и тонкости реализации гипотетические. В вашем случае они могут быть совсем другими. Однако общий принцип прослеживается.
А вот это уже дерево классов
одной достаточно сложной
игры, написанной на GLScene.
Не удивляйтесь вы такого
окошка в Delphi не найдете.
Это специальный плагин,
написанный одним из
главных координаторов
разработки GLScene для
удобного ориентирования в
сотнях страниц исходного
кода. А называется сие
чудо Code Warp.
    TMovable=class
    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;
У каждого из трудяг-сеттлеров
десятки разных свойств и
методов.
    TArrow=class(TAmmo)
    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;

Схема простейшей игровой
иерархии. Более сложные
строятся по образу и подобию.
    Золотые правила иерархии
    У каждого конкретного движка своя собственная, совершенно неповторимая система иерархии. Но... Есть несколько общих принципов создания удобной иерархии, которые используются разработчиками во всех качественных движках. При построении собственного игрового “двигателя” обязательно нужно иметь их в виду.
    ПРИНЦИП ПЕРВЫЙ. Если два класса, относящиеся к разным базовым классам, имеют одинаковые по смыслу и реализации свойства или методы, значит, вы что-то не так сделали. Необходимо пересмотреть всю систему и сделать ее не избыточной.
    ПРИНЦИП ВТОРОЙ. Пользуйтесь замечательным правилом Бритвы Оккама: не плодите сущностей сверх необходимости. Например, не стоит объединять всех игровых персонажей с зеленой чешуей в отдельный класс, основным отличием которого является свойство зеленочешуйчатости. Если только это свойство не ключевое для игры.
    ПРИНЦИП ТРЕТИЙ. Представьте себе, что вам нужно добавить в вашу игру: гиппогрифа, чемодан, танк со сменными колесами, всем живым существам признак наркотического отравления, изменить у всех объектов проверку столкновений с боксовой на полигональную. Если все эти вещи вы сможете сделать без изменения структуры иерархии значит, вы все сделали правильно.

    Полцарства за наследника
   
В коде, который мы только что рассмотрели, все методы, объявленные в родительском классе, переобъявляются в финальных классах. Причем в
Технология наследования
классов и перегрузка
методов нетривиальная
операция выполняется
одной строчкой.
родительском классе после объявления стоит слово virtual, а в классе потомка override. Такой прием называется перегрузкой. Давайте разберемся, зачем он нужен.
    Возьмем для примера метод Attack, который есть у тролля и у орка. Если подумать, реализация этого метода должна быть для них разной. Ведь орк атакует оружием, а тролль не только оружием, но и магией. Допустим, по нашей задумке тролль всегда атакует противника магией на дальних дистанциях, а оружием на ближних. Орк атакует только оружием на ближних дистанциях. В реализации метода Attack для этих двух персонажей будет общая часть (атака оружием) и части различные. Можно также сказать, что на ближних дистанциях тролль ничем не отличается от орка. Тогда атаку обычным оружием мы реализуем в методе Attack у родительского класса орка TBattleCharacter, а атаку магией реализуем в родительском классе тролля TMage. Причем у всех потомков TMage будет возможность драться как магией (так как эта возможность заложена в сам этот класс), так и обычным оружием (так как эта возможность присутствует у одного из предков TBattleCharacter). Допустим, метод Attack у TBattleCharacter уже реализован. Тогда метод Attack у всех магов, в том числе и у тролля, может выглядеть так:
Класс героев в Warсraft III был
наследован от класса простого
атакующего юнита, так как все
базовые методы и свойства у
них одинаковы.
    procedure TTroll.Attack(obj: TLifeObject);
    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. Эта графическая библиотека имеет крайне продуманную и удобную иерархию классов. Причем дерево классов довольно развесисто. Самые длинные цепочки наследования содержат до десяти уровней! А базовых классов, над которыми строятся все остальные, не больше десятка (всего классов больше трехсот!). Давайте рассмотрим несколько наиболее интересных ветвей этого могучего дерева. Это поможет лучше понять принципы наследования. Кроме того, многие родительские классы тех классов, которыми мы часто пользуемся, интересны и сами по себе. С их помощью можно реализовать многие вещи, недоступные на самом верхнем уровне иерархии.
Дриада и здание на заднем
фоне образованы от одного и
того же класса. Положение в
прострaнcтве и углы поворота
в прострaнcтве, линейные
размеры, трехмерная модель,
текстура, параметры освещения.
    Самый главный класс GLScene сам TGLScene. В нем содержатся все данные о сцене, ее описание (объекты, камеры, источники света и так далее) и вспомогательная информация, необходимая для рендера. Спустимся вниз по дереву иерархии до стандартного класса Delphi. Им будет TComponent, который воплощает основные свойства визуальных компонентов (то есть классов, объектами которых программист может манипулировать иначе, чем через код). Поднимемся на уровень выше TGLCadenceAbleComponent. Этот класс добавляет возможность работы с TGLCadencer его предназначение мы подробно разобрали в прошлой статье цикла. Идем еще выше и встречаем TGLUpdateAbleComponent. Он добавляет возможность обновления данных для стандартных компонентов GLScene. Идем еще выше и встречаем сам TGLScene. Эта цепочка оказалась короткой.
    Давайте от TGLUpdateAbleComponent свернем в другую сторону к классу-потомку TGLBaseSceneObject. Это базовый класс для всех видимых и многих невидимых классов GLScene. Он добавляет к предыдущим классам целую гроздь важнейших свойств и методов: динамическое изменение иерархии, понятие координат, векторы направления, поворота, масштабирования, сортировка и множество геометрических операций, например расстояние до другого объекта, и многое другое. Если вы хотите написать свой собственный компонент для GLScene (а рано или поздно такая потребность у вас обязательно возникнет), начинать надо именно отсюда.
Между разными классами могут
существовать очень интересные
связи, незаметные на первый
взгляд. Даже между главным
героем и мини-картой.
    Поднимаемся на уровень вверх и приходим к TGLCustomSceneObject. Этот класс добавляет к предыдущим свойство Material, которое отвечает за свойства материала, текстуры и некоторые параметры освещения. Далее идет TGLImmaterialSceneObject. Он служит буфером между видимыми и невидимыми объектами. Одолеваем очередную ступеньку и встречаем TGLSceneObject. Этот класс олицетворяет собой стандартный видимый объект GLScene, который можно, что называется, “пощупать”. От него уже нельзя образовать нематериальные объекты. Идем еще выше, и перед нами TGLBaseMesh. Этот класс добавляет к предыдущим списки координат вершин, текстур и нормалей для сложных объектов. Уже чувствуете, куда мы движемся? Нет, ну тогда еще один шажок и вот она, вершина!
    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.


Косплей недели: Mass Effect, League of Legends, Genshin Impact, Mortal Kombat

Тали'Зора — Mass Effect Открывает сегодняшнюю подборку редкая гостья в этой рубрике: скрытная и в буквальном смысле хрупкая (да настолько, что ей нигде нельзя снимать ни шлем, ни защитный костюм) Тали'Зора из оригинальной…|Игромания...

26 04 2024 2:36:42

Shadow Ops

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

25 04 2024 15:30:17

Паяльная камасутра. Краткое руководство владения паяльником для начинающих

По спецификации IBM PC, единственный инструмент, необходимый для манипуляций с железом, — отвертка. Про паяльник там и слова не сказано. Но, тем не менее, пользоваться им порой приходится. Почему? Во-первых, разработчики спецификации не предусмотрели неко...

24 04 2024 20:14:50

Краткие статьи. All American: The 82nd Airborne in Normandy

The The 82nd Airborne является прямым потомком The 101st Airborne и повествует о славных стычках 82-й воздушно-десантной дивизии с фрицами в Нормaндии немного к северо-востоку от дивизии 101-ой, не менее воздушно-десантной. Это примерно как если бы русски...

23 04 2024 21:15:51

Hatoful Boyfriend

Близкие по духу Save the Date! Katawa Shoujo ***ogue: A Hate Story Holiday Star Х. Шмидт, Р. Пролл, «Гoлyби. 300 пород для выставок и разведения» «Мне нравится, как тут прописаны хаpaктеры, — говорит С.,…|Игромания...

22 04 2024 2:31:22

В центре внимания "The Elder Scrolls: Morrowind"

"Bethesda поступила оригинально: вопреки всем традициям и канонам, она еще до релиза игры выпустила... редактор игрового мира. The Elder Scrolls Construction Kit..."...

21 04 2024 23:24:23

Демодиск

Drakan: Order of the Flame Разработчик: Surreal Software Издатель: Psygnosis Жанр: 3D-action/adventure Требования: Р-166,16 Мб, рек. 3D-уск. Наконец-то близок к заверше­нию очередной «наш ответ тете Ла­ре» со стороны Psygnosis - много­обещающая трехмерна...

20 04 2024 20:30:44

Обзор и тест ноутбука на жидком металле ASUS ROG G703GXR. Внутри: I9-8950H, RTX 2080 и 1,5 ТБ SSD

После тестов нескольких супертонких ноутбуков с их компромиссами по питанию, частотам и охлаждению мы протестировали настоящего бойца: толстую, тяжёлую семнашку, которая жрёт 380 Вт, держит i9 на 4,8 ГГц, позволяет RTX 2080 работать на двух…|Игромания...

19 04 2024 13:59:50

Gothic II

Признаюсь, очень хотелось начать словами "Иногда они возвращаются". Однако после некоторого размышления понял, что это неправда: создатели Gothic никуда и не уходили. Более того, они даже не собирались выпускать первую часть Gothic в тот срок, в который...

18 04 2024 14:55:49

22 факта о Хитмэне

Даже самые засекреченные агенты не бывают засекречены совсем уж намертво. Информация — такая штука, которую очень трудно на веки вечные надежно упрятать в глухой бункер, она всегда найдет щелочку, чтобы просочиться. Вот и…|Игромания...

17 04 2024 5:12:21

Duel of Champions: как выжить в карточном мире?

Среди компьютерных карточных игр Duel of Champions — одна из самых навороченных, и за год ее механика только окрепла. Однако не скажешь, что она любит новеньких. Новичкам стараются помочь — по-разному, — но избежать нервотрепки все…|Игромания...

16 04 2024 19:43:53

... за разумные деньги

К традиционным номинациям ("Дешево и сердито... Категория меньше 500$", "Cмepть тормозам... Категория меньше 1000$" и "Тебя я видел во сне... Категория больше 1000$" на процессорах AMD и Intel) добавилась еще одна: "Займи, но купи"....

15 04 2024 16:42:38

Предварительный обзор Prey (2017). Мы с тобой одной крови

В середине февраля «СофтКлаб» и Bethesda провели закрытую презентацию фантастического экшена Prey. На ней нам показали самое начало игры и позволили познакомиться с основными механиками. Но дальше первых уровней так и не пустили.…|Игромания...

14 04 2024 20:40:20

Восьмая скорость цвета. Новый стандарт графической шины AGP 8X

Человечеству, видимо, свойственно стремиться куда-то ввысь и вдаль. Паровозы и пароходы, лишь недавно бывшие последним словом индустрии, уступили место тепловозам и теплоходам, автомобили успевают мopaльно устаревать до окончания их гарантийного срока. О...

13 04 2024 3:40:42

10 причин посмотреть фильм «Убийца 2. Против всех». Ни любви, ни тоски, ни спойлеров

Жанр: триллер, боевик Режиссёр: Стефано Соллима Сценарий: Тейлор Шеридан В ролях: Бенисио дель Торо, Джош Бролин, Изабела Монер Премьера в России: 27 июня 2018 года Возрастной рейтинг: 18+ После похода на второго Sicario я несколько дней пытался…|Игромания...

12 04 2024 21:41:20

Всей стаей. Юниты Heart of the Swarm: новые и переработанные

«…Для фанатов StarCraft 2 у Blizzard в этом году не было припасено никаких громких анонсов. Вместо этого компания сфокусировалась на том, чтобы дать максимальному числу людей поиграть в актуальный билд Heart of the Swarm. И рассказать о том, какие изменен...

11 04 2024 2:55:31

Мнение о Total War: Warhammer 2 Rise of The Tomb Kings

Артур Масс, автор Игромании Любитель JRPG, запойных марафонов в игры по 12+ часов и военных фильмов. Древнейшая империя кхемри, чьи правители когда-то владели большей частью Южных Земель и Старого Света, ныне превратилась в безжизненную пустыню.…|Игромания...

10 04 2024 1:22:36

Простой выбор. Тестирование игрового компьютера OLDI HOME 336

«…Если описывать OLDI HOME 336 одной фразой, то получится что-то вроде «отличный компьютер для работы/учебы/игр». OLDI Computers здорово сбалансировала систему. Мощный процессор справится с тяжелыми приложениями вроде 3DS Max или Photoshop, а видеокарта п...

09 04 2024 0:34:45

Будни архивариуса. Три волшебных буквы, часть 2

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

08 04 2024 18:22:38

Вода на службе человека. Тестирование системы водяного охлаждения Zalman Reserator XT

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

07 04 2024 19:49:30

Первый взгляд. Экспедиция-Трофи

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

06 04 2024 10:15:32

Твикни это. Профессиональная настройка вашей операционной системы

В 1995 году Microsoft дала начало новой тенденции в мире скрытых возможностей операционных систем. Microsoft оснастила новую операционную систему множеством новых настроек, и пpaктически все, что можно было настроить, стало настраиваемым. Официально все э...

05 04 2024 12:19:31

Resident Evil 4

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

04 04 2024 3:31:13

Ace Combat 7: Skies Unknown. Легенды не умирают

Уверен, лишь немногие из вас хорошо знакомы с серией Ace Combat за авторством студии Project ACES. Но те, кто всё же знаком, знают, что это один из самых умопомрачительных экшенов про современную авиацию. Хоть и не всем понравились последние части,…|Игромания...

03 04 2024 6:15:52

Rayman Raving Rabbids

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

02 04 2024 17:50:32

Сетевой поиск. Ищем файлы в интернете и локальных сетях

как, например, использовать сразу несколько поисковиков и объединить их результаты в один? Или найти какой-то определенный тип файлов? Оказывается, очень просто: бесплатного софта для таких задач создано немалоНапример: Search+, Copernic Agent Basic, WinM...

01 04 2024 10:31:30

Wasteland 2

«…Действие Wasteland 2 развернется все в том же альтернативном мире, где в 1998-м разгорелась ядерная война между США и СССР. И мы снова играем за рейнджеров Пустоши, выживших и отстроивших свою общину в бывшей федеральной тюрьме на юго-западе Америки…»...

31 03 2024 12:34:33

тестовая 26.06.2014

Порадовало Огорчило запыленный инвентарь и излишняя акробатика пошли под нож; минимум изобразительных средств дает максимум выразительности картинке игры; у звукового дизайнера определенно прекрасный вкус; подлинные фотографии и документы…|Игромания...

30 03 2024 3:46:10

Руководство и прохождение по "Pariah"

Игру ждали. Не то чтобы все и упopно... Но надежды возлагали большие. Когда появились первые ролики, у многих отвалились челюсти. Дальше — больше. После премьеры на E3 2004 один весьма уважаемый западный сайт вручил игре награду “E3 2004 Biggest PC...

29 03 2024 7:57:23

Руководство и прохождение по "Dark Sector"

Dark Sector — сын ошибок трудных. Этот долгострой, зародившийся в начале нового тысячелетия, некогда стартовав как космический stealth-action, постепенно преобразился в нечто среднее между Gears of War и Resident Evil 4, сменив декорации далекого...

28 03 2024 21:30:12

События года: триумф Fortnite, закрытие Telltale Games, выход Fallout

Пришло время пройтись по самым значимым событиям 2018 года и вспомнить всё то, что оставило свой след в мире видеоигр. Игромания подводит итоги года: лучшие игры 2018-го! Нашествие королевских битв В 2017 году королевские битвы изрядно встряхнули…|Игромания...

27 03 2024 1:54:51

Геройский редактор. Создание новых уровней для HoMM 5

...выпустили третью «заплатку», в которую был встроен полноценный редактор карт для пятых «Героев». Пока программа доступна только на английском языке (подробный мануал — на нем же), но в самом ближайшем будущем Nival собирае...

26 03 2024 0:28:34

Руководство и прохождение по "REDLINE GUNG WARFARE: 2066"

В совсем недалеком будущем профессор психиатрии мистер Рейч изобрел источник бесконечной энергии. Поначалу никто не обратил на него внимания, но спустя несколько лет технология стала известна обществу. Ученые серьезно взялись за бесценное изобретени...

25 03 2024 21:45:33

Bionicle Heroes

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

24 03 2024 13:35:32

Руководство и прохождение по "Plants vs. Zombies"

Море юмора, задачки самой разной сложности, различные тактики прохождения. Если вы не знаете, что такое Tower Defense, то это замечательный повод познакомиться. И что особо примечательно — в отличие от многих аналогичных игр, у нее есть лицо. И неважно, ч...

23 03 2024 8:29:15

Delta Force: Black Hawk Down - Team Sabre

"...С одной стороны - вылизанное до зеркального блеска графическое исполнение, голливудский размах декораций и постановки действа, с другой - настолько небрежная начинка, что за Ричарда Левелорда и его подшефную компанию делается как-то неловко..."...

22 03 2024 8:40:25

Горячая линия: железо

    Здравствуйте, уважаемый Дмитрий Горячев! Пишу я вам вот почему: я переформатировал жесткий диск и загрузился с заранее созданной загрузочной дискеты Windows. Но почему-то загрузочная дискета никак не может обнаружить…|Игромания...

21 03 2024 14:34:32

Shin Megami Tensei: Strange Journey

Гипотетическая ситуация: если вдруг на каком-нибудь экзамене вам попадется вопрос «Типичные признаки японского разработчика видеоигр» (ну, мало ли) — вспомните, пожалуйста, про маленькое подразделение в компании Atlus, отвечающее…|Игромания...

20 03 2024 12:15:50

Elements of War

«…По сути, Elements of War представляет собой популярную стратегию World in Conflict, к которой прикрутили погодное супероружие. По ходу дела вы сможете захватить образцы экспериментальной техники и начать строить из себя не то бога, не то мелкого беса ве...

19 03 2024 18:39:37

Отечественные локализации. Advent Rising

Эпических масштабов проект с претензиями на звание «нового Halo» с треском провалился в продаже. GlyphX Studios, всю сознательную жизнь создававшие заставки для высокобюджетных блокбастеров, собрались вдруг сотворить собственного колосса. По этому повод...

18 03 2024 0:59:19

Dishonored: Death of the Outsider на QuakeCon 2017. Чужого можно не убивать

Dishonored: Death of the Outsider — это самостоятельное дополнение для Dishonored 2. Для него не нужна установленная основная игра, поэтому покупать его можно отдельно. Для фанатов серии ситуация непривычная: похожие аддоны для…|Игромания...

17 03 2024 14:58:51

История спецназа. Часть IV: Спецподразделения США

"...Изучение опыта последних военных конфликтов с участием США показывает, что армия этой страны все чаще использует абсолютно новую тактику ведения боевых действий..."...

16 03 2024 22:43:44

Assassin’s Creed: Brotherhood

«…выполнять задания просто интересно. Миссии Леонардо — потому что в них дают поуправлять деревянным танком, деревянной paкетной гондолой и деревянным бомбардировщиком. Город хочется восстанавливать, потому что, как и деревня Монтереджиони из второй части...

15 03 2024 2:53:50

Содержание диска №3 (186)

► Игры '2013 Самые ожидаемые игры 2013 года Время: 23:28 Мы опросили всех редакторов — какие десять игр вы ждете в 2013 году? Собрали в единую таблицу и вычеркнули те проекты, за которые проголосовало не больше одного…|Игромания...

14 03 2024 22:50:45

Uncharted: The Fourth Labyrinth

«…Здесь есть и динамично развивающаяся история, изобилующая лихими поворотами, и детективная интрига, и множество фирменных шуточек в исполнении Дрейка и Салли. Конечно, оружие они пускают в ход куда реже, чем в играх, но для книги это вполне логично. А в...

13 03 2024 19:31:58

Collapse

все плохие фантастические боевики сразу. Когда суровый мужчина в развевающемся красном плаще и хоккейном шлеме (!) произносит пафосную речь, а затем уносится в подворотню на футуристического вида мотоцикле (точь-в-точь как у одного из героев мультсериала...

12 03 2024 5:47:36

...за разумные деньги

Вечнозеленые “Дешево и сердито... Категория меньше 500, “Cмepть тормозам... Категория меньше 1000, “Займи, но купи... Категория больше 1000 и — “Тебя я видел во сне” (цена не ограничена)....

11 03 2024 14:20:24

Топ-10 самых опасных трюков в кино: от «Индиана Джонс» и «Бен-гур» до «Скалолаз» и «Три икса»

Компьютерная графика всё активнее захватывает кинематограф, наводняя экраны эффектными кадрами, не отличимыми от реальности. Но тем ценнее cyмacшедшие трюки дублёров!...

10 03 2024 23:22:54

Руководство и прохождение по "Battle Zone"

Увидев название игры, многие из игроманов, наверное, подумают: “Похоже это один из первых клонов игры Armor Command”. И зря, потому что Battle Zone – продукт совершенно особенный и оригинальный. Здесь вы не найдете стратегию в чистом виде, как в Arm...

09 03 2024 13:31:40

Руководство и прохождение по "Desperados Wanted Dead Or Alive"

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

08 03 2024 21:28:15

Еще:
Игры -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 ::