.
Описание классов библиотеки «Easy game base library version 2.0»
Автор megabax   
25.03.2010 г.
Скачать библиотеку можно здесь

Скачать библиотеку можно здесь.

Скачать библиотеку с примером можно здесь

Посмотреть историю изменения библиотек можно здесь.

(C) Шуравин А. П. www.easyprog.ru

 

Описание классов библиотеки «Easy game base library version 2.0»

 

Модуль EasyGameBase – базовые классы.

 

Класс TEGBaseClass. Является родителем всех классов библиотеки. Содержит методы Serialize и Unserialize,  которые пишут и читают в поток соответственно.  Поддерживает контроль версии, для этого предусмотрен защищенный метод  GetVersion, при изменении версии класса он модифицируется. Таким образом, если потока читается объект старой версии это можно проанализировать. При чтении версия записывается в защищенное поле FVersion.  Так же содержит абстрактный метод GetClassCaption, предназначенный для получения русскоязычного наименования класса. Его необходимо переопределять для каждого дочернего класса.

Начиная с версии 1.4 содержит свойство ID – идентификатор объекта, который присваивается при добавлении его в контейнер.

 

Класс TEGVector. Класс вектор с неограиченым количеством координат. Сериализация объекта пока не реализована. Из функциона пока реализована только поддержка обращения к координате по индексу. 

 

Класс TEGBitmap. Хранилище битовой карты. Сейчас пока просто имеет свойство Bitmap тип TBitmap, но в будущем будет развиваться.

 

Класс TEGCollection. Предок все коллекций и контейнеров. Содержит методы поиска, добавления и удаления.  Так же есть метод IsMap, который проверяет, является ли данная коллекция картой. Для новых классов этот метод требует переопределения, если его признак «Карта» отличается от родительского.  

 

Класс TEGPointerCollection. Коллекция указателей на объекты класса TEGBaseClass или его потомков. В отличии от TEGContainer предназначен для хранения именно указателей, а не самих объектов.

 

Класс TEGLocationObjectsCollection дочерний от TEGPointerCollection. Это коллекция указателей на объекты класса TEGLocationObject или его потомков. В отличии от TEGBaseClass предназначен для хранения именно указателей, а не самих объектов.

 

Класс TEGEvent. Абстрактный класс игрового события. Содержит список участников события, имеет метод Reaction (абстрактный), который предназначен для реализации реакции объектов-участников события на событие. Имеет поле Age, которое увеличивается на единицу после каждого такта.

 

Класс TEGAxesSystem. Является преобразователем координат. Задается точка начала координат в другой координатной системе и масштаб по оси x и y. Для преобразования используются функции GetX, GetY и GetPoint. Для обратного преобразования, когда нужно по точке на экране определить координаты в координатной плоскости используются функции ScreenToAxesX и ScreenToAxesY.

 

Класс TEGNoun. Обозначает сущность игры. Является родителем классов контейнеров (TEGContainer) и классов, обозначающих объекты (TEGObject).  Содержит метод процедуру MakeQuantumOfTime, которая предназначена для совершения действия за выделенный сущности квант времени. Для принятия воздействия от других объектов содержит метод AcceptAction. У данного класса он абстрактный. 

 

Класс TEGContainer. Предназначен для управления списком объектов. Имеет метод AddGameObject – добавление объекта в список. Метод MakeQuantumOfTime передает квант времени всем хранящимся в нем объектам. Данный класс является родителем для класса «Карта» (TEGMap) и «Платформа игры»  (TEGPlatform).  В отличии от TEGPointerCollection и TEGLocationObjectsCollection хранит именно сами объекты, которые физически удаляются из памяти при вызове деструктора этого класса, либо при удалении методом Delete.

 

Класс TEGMap. Данный класс реализует карту.  Имеет свойства «Максимальные координаты» (MaxX и MaxY), метод AddGameObject может добавлять только локационные объекты (TEGLocationObject) и их потомки.  Имеет метод Draw, который отображает карту со всеми включенными в нее объектами на экране. Для преобразования координат данный класс инкапсулирует объект TEGAxesSystem. В данном классе предусмотрены методы для поиска объектов по координатам FindObjectsAsCoord и поиска заданного класса по координатам FindObjectsAsCoordAndClassName. Оба метода возвращают TEGLocationObjectsCollection. Для отображение карты ее необходимо сязать с компонентом TImage через поле Image.

 

Класс TEGAction.  Заготовка для класса «Действие». Содержит метод GetActionName, который возвращает наименование действия. Для одного и того же действтия могу быть несколько классов потомков TEGAction, но со своими особенностями, в зависимости от того, какой из объектов генерирует действие. При этом предполагается, что:

·        Каждый объект умеет принимать действие.

·        После принятие действия может возникнуть либо событие, либо объект инициирует ответное действие (но уже в следующем кванте времени).

 

 

Класс TEGPlatform. Игровая платформа. Функция данного класса – все включенным в игру объектам дать квант времени и увеличить текущее время на приращение.  Так же может при помощи этого класса управлять скоростью течения игры и размером кванта времени. Иными словами, за один такт вызова метода MakeQuantumOfTime квант времени может раздаваться объектам несколько раз, в зависимости от размера кванта времени и скорости течении игры. Если скорость больше, то за один такт квант времени раздается большее число раз.

 

Класс TEGObject.  Объект. В отличии от сущности объект умеет производить действие в отношении других объектов (метод Action).

 

Класс TEGLocationObject. В отличии от просто объекта привязан к карте, имеет координаты. Так же имеет метод DrawWithMap для его прорисовки на карте. Содержит абстрактный метод IsCollision, предназначенный для проверки коллизии (столкновения) с другим объектами. Для проверки, является ли данный объект подвижным или статичным, предназначен метод IsMobile. По умолчанию он возвращает false и требует переопределения у дочерних классов, если их признак подвижности (статичности) отличается от родительского. Содержит абстрактный метод GetStopVector, который определяет останавливающий вектор для события стоп. Предполагается, что для направления остановки значения вектора 0, для направления, в котором нет препятствий движению единица.  Вектор остановки предполагает два направления – по горизонтали и вертикали. Объект, получивший вектор остановки, должен сам обрабатывать его. Он может, например, остановится в направлении остановки или отразиться от препятствия. В будущем планируется расширить значения векторов остановки, ввести, например, понятие частичной остановки (значении больше 0 но меньше 1).  В настоящее время методы IsCollision и GetStopVector реализованы у класса TEGWall (стена), а реакция на коллизию реализована у потомка TEGUnit – класса TEGEventsUnit.

 

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

 

Класс TEGPartsContainer.  Заготовка для контейнера составных частей объекта  (TEGPartOfObject).

 

Класса TEGDrawMapObject. Класс объекта, который может быть нарисован на карте. Дочерний от TEGLocationObject. Имеет свойство Bitmap:TEGBitmap -  ссылка на картинку в виде битовой карты, которая может отобразиться на карте как обозначение объекта.

 

Класс TEGUnit. Реализует юнита – подвижный игровой объект. В данной версии может двигаться по карте со скоростью, заданной вектором в свойствах VX, VY (скорость по оси X и Y) соответственно. Начиная с версии 1.4 можно задать тип прорисовки (свойство UnitDrawMode):

·        udrQuantumOfTime - при каждом новом кванте времени (в этом случае он будет двигаться по экрану плавно).

·        udrNewLocation - только при перемещению в новую локацию (будет двигаться рывками, но реже перерисовываться).

Начиная с версии 1.5 имеет метод GetVAsVector – получить скорость юнита как вектор.

 

Класс TEGWall. Реализует объект «стена». В данной версии реализовано только отображение стены на карте в виде перегородок (что бы можно было создать лабиринт).

 

Класс TEGPartOfWall. Заготовка для составных частей объекта TEGWall (стена).  Имеет абстрактный метод IsPossibleEnter, который показывает, может ли данная часть обеспечить проход сквозь стену. Пример объекта, который позволяет пройти сквозь стену – дверь. Она может быть открытая или закрытая.

 

Класс TEGWallPartsContainer. Заготовка контейнера составных частей стены. В него можно добавить только объекты класса TEGPartOfWall или их потомки.

 

 

Модуль EasyGameWallForm– форма редактирования параметров стены.

 

Класс TfrmWallParameters. Класс формы редактирования параметров стены. Может редактировать координаты и расположения стены: слева, справа, спереди, сзади.

 

 

Модуль EaseGameForms -  модуль форм редактирования объектов.

 

Класс TEGObjectEditForm – класс предка для всех форм редактирования объектов. Объявлять формы рекомендуется примерно вот так:

 

  TfrmWallParameters = class(TEGObjectEditForm)

    chbTop: TCheckBox;

    chbLeft: TCheckBox;

    chbRight: TCheckBox;

    chbBottom: TCheckBox;

    spX: TSpinEdit;

    spY: TSpinEdit;

    Label1: TLabel;

    Label2: TLabel;

    btnOk: TBitBtn;

  private

    { Private declarations }

  public

    { Public declarations }

    function EditObject(AObject:TEGBaseClass):integer; override;

  end;

 

Модуль EasyGameActions-  базовые игровые действия

 

Класс TEGStopAction. Действие «остановка».  Имеет свойство StopVector:TEGVector. Предназначено для остановки объектов. Предполагается, что

·        Юнит сам проверяет себя на столкновение с другими объектами.

·        При этом создается событие, которое "знает", как объекты должны реагировать друг на друга.

·        Событие хранит объект инициатор события.

 

 

 

Модуль EasyGameEvents -  базовые игровые события и объекты, реагирующие на них

 

Класс TEGCollisionEvent. Событие столкновения. Возникает, когда в одной локации пересекаются два и более объектов. Генерация события реализована для пары  классов TEGEventsUnit и TEGWall – иными словами, когда юнит натыкается на стену.

Класс TEGWall. Класс юнита, который умеет останавливаться, натыкаясь на стену. Имеет метод Stop – остановка по вектору остановки.