Помощь в обучении программированию

Помощь в обучении программированию

Наше предложение для тех, кто хочет научиться программировать на Delphi,

изучая исходники других программ!

Вы можете бесплатно скачать саму игру (ТЕТРИС), но обязаны заплатить 5

долларов за исходник программы. Вы получаете полный текст программы на

Delphi и комментарии к ней! Всего за 5 долларов вы сможете изучить текст

самой известной программы и понять, как создаются игры, такие как Tetris!

Мы дадим вам математический алгоритм программы! Теперь вы станете намного

опытнее и сможете самостоятельно создавать программы и зарабатывать на этом

деньги как в реальной жизни, так и в интернете!

Избегайте своих ошибок, мы научились правильно программировать и поможем

научить этому вас!

www.tetriswithsource.com

Описание модулей

TetrisP - Основной файл проекта

Tetris00 - Модуль содержит основную форму проекта (TMainForm). Производит

связку между нажатиями горячих клавиш и кнопок панели управления с вызовом

процедур обработки соответствующих событий находящихся в модуле Tetris02 и

вызовам процедур прорисовки поля.

Tetris01 - Модуль содержит определение ячейки поля (TFieldCell), как записи

о цвете и номере отображаемой в ячейке текстуры. А также реализацию

игрового поля (класс TField) - позволяющего проводить отрисовку и

простейшие операции над игровым полем.

Tetris02 - Модуль содержит реализацию алгоритма игры (класс TTetrisGame),

обрабатывает события от таймера, ведет статистику (время игры, количество

выпущенных фигур, удаленных линий). Создает фигуру случайным образом фигуру

которая будет активной в течении следующего промежутка времени и производит

с ней непосредственное взаимодействие. Отлавливает все логические ошибки

происходящие во время игры и связанные например с попыткой запустить уже

активную игру.

Tetris03 - Модуль содержит методы по работе со всеми фигурами используемыми

в проекте и учитывает все их особенности реализации. (классы фигур

TXXXXFigure).

Tetris04 - Модуль содержит определение констант используемых в программе и

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

должен будет сливаться с пустой ячейкой поля.

Tetris05 - Модуль содержит форму настроек (TOptionsForm) позволяющую

отображать список существующих фигур читать и устанавливать их свойство

Enabled.

Tetris06 - Модуль содержит определение структуры (TFigureInfo) для хранения

необходимой информации о существующей фигуре, массив записей этого типа с

описанием всех фигур проекта (для возможности отображения в форме настроек

и выбора фигуры случайным образом), а также методы по доступу к этим данным

Tetris07 - Модуль обеспечивает многоязыковую поддержку. Он содержит в себе

определение всех строковых констант используемых в сообщениях проекта и

позволяет создавать исполнимый файл с сообщениями как на английском так и

на русском языке.

Описание классов

TMainForm - класс основной формы проекта. Включает в себя такие объекты,

как

|MainToolBar |панель инструментов |Расположена на форме в правой части и |

| |(TToolBar*) |содержит в себе набор кнопок (btnXXXX) |

|btnXXXX |кнопки (TButton*) |Расположены на панели инструментов и |

| | |предназначены для удобного вызова заданных|

| | |процедур |

|MainImageList |список изображений |Содержит изображения иконок используемых |

| |(TImageList*) |кнопками (btnXXXX) |

|MainActionList |список действий |Содержит перечень действий (actXXXX) |

| |(TActionList*) |используемый программой |

|actXXXX |действия (TAction*) |Предназначена связи кнопок (btnXXXX), |

| | |горячих клавиш и вызова заданных процедур |

|MainPanel |панель (TPanel*) |Расположена в верхней части формы и |

| | |предназначена для выводы статистической |

| | |инфорамции (время, количество фигур, |

| | |количество удаленных линий)в процессе игры|

|MainImage |изображение |Расположено в центральной части формы и |

| |(TImage)* |предназначена для показа игрового поля на |

| | |экране. (Но не его прорисовку!) |

|MainStatusBar |строка состояния |Расположена в нижней части основной формы,|

| |(TStatusBar)* |предназначена для отображения статуса игры|

| | |(активна, приостановлена, закончена и |

| | |т.д.) и подсказки для кнопок над которыми |

| | |находится манипулятор мышь |

|fReg |реестр |Предназначена для работы с реестром - |

| |(TRegistryDef*) |сохранением настроек программы между |

| | |сеансами работы |

|fField |игровое поле |Реализует хранение логической информации о|

| |(TField) |состоянии поля и его прорисовку т.е. вывод|

| | |в изображение (TImage) |

|fOptionsForm |форма настроек |Предназначена для возможности выбора фигур|

| |(TOptionsForm) |используемых в программе |

|fGame |игра (TTetrisGame) |Реализует алгоритм игры |

(* - помечены стандартные объекты Delphi)

TFieldCell - запись содержащая информацию об каждой ячейке игрового поля.

|Color |longint |Цвет в ячейке если не используется |

| | |текстура |

|FigureNum |integer |Номер фигуры которая попадает в данную |

| | |ячейку. 0 - если фигуры нет |

|TextureNum |smallint |Номер текстуры в ячейке. Отрицательные |

| | |числа соответствуют текстурам бомб |

TField - класс игровое поле. Включает в себя такие объекты, как

|fBomb |Список объектов |Предназначен для хранения списка текстур |

| |(TObjectList) |бомб |

|fTexture |Список объектов |Предназначен для хранения списка текстур |

| |(TObjectList) |непустых клеток |

|fImage |Изображение (TImage)|Предназначено для хранения указателя на |

| | |изображение основной формы |

|fFieldMatrix |Матрица |Предназначена для хранения массива с |

| |(TFieldMatrix) |данными типа TFieldCell о клетках. |

поля:

|fFieldSize |Размер ячейки |Хранит размер ячейки поля в пикселах |

| |(integer) | |

свойства:

|FieldCountX |Число ячеек по X |Позволяет определить размер поля в |

| |(integer) |количестве ячеек вдоль X |

|FieldCountY |Число ячеек по Y |Позволяет определить размер поля |

| |(integer) |приспособленный для игры в количестве |

| | |ячеек вдоль Y * |

|FieldRealCountY |Число ячеек по Y |Позволяет определить фактический размер |

| |(integer) |поля в количестве ячеек вдоль Y |

|FieldVisibleCountY |Число ячеек по Y |Позволяет определить видимый размер поля в|

| |(integer) |количестве ячеек вдоль Y |

* Фактически размерность массива по X совпадает с тем что отображается на

экране, по Y ситуация другая. Фактически в памяти поле представлено по Y с

большим размером (+ReservedLines). Это вызвано необходимостью хранить

данные о фигуре которая только начала падать и находится вне пределов

видимости в верних строках и тем что именно по занятости хотя бы одной

ячейки верхних ReservedLines строк определяется окончена игра или нет.

Фактический размер определяется FieldRealCountY, допустимый для нахождения

фигур FieldCountY. В то же время на экране может отображаться любое число

строк от 1 до FieldRealCountY. Поэтому присутствует еще одно свойство

FieldVisibleCountY, которое как раз и определяет сколько строк видно

пользователю. В частности этот момент использовался при отладке - когда на

экране было все поле целиком, фигура начинала падать не с самого верха и

игра заканчивалась когда фигура застревала на верхних ReservedLines

строках, а не обязательно достигнув верхней границы.

методы:

|ClearAll |Очистка игрового поля, путем занесения 0 во все |

| |ячейки |

|ClearCell (x,y:integer) |Очистка ячейки (x,y) путем занесения 0 в эту ячейку |

|SetAtCell (x,y:integer;const |Установка в ячейку (x,y) значения Cell. Т.е. |

|Cell:TFieldCell) |логическое получение занятой ячейки |

|GetAtCell (x,y:integer) |Получение значения из ячейки (x,y) |

|ClearAt |Определяет свободна ли ячейка (x,y) логически и если|

|(x,y:integer;CurCell:PFieldCel|указан CurCell то ячейка считается свободной даже |

|l=nil) |когда там находится значения совпадающее с CurCell. |

|DelFullLine |Удаление одной из полностью занятых строк. |

|IsOverflow |Проверка на переполнение. Переполненным полем |

| |считается поле для которого хотя бы одна ячейка |

| |верхних ReservedLines занята |

|DeleteFigure(FigureNum:integer|Удаление с поля фигуры с номером FigureNum. |

|) |Используется при падении Бомбы-2 |

|DrawToImage |Прорисовка текущего состояния поля |

Игра может находится в одном из логических состояний:

|gmNothing |Игра не начата |

|gmActive=1 |Игра идет |

|gmSuspend=2 |Игра приостановлена |

|gmEnded=3 |Игра завершена |

|gmAborted=4 |Игра прервана пользователем |

|gmGraphicErr|Игра завершена с ошибкой во время рисования |

|or | |

|gmCreateFigu|Игра завершена с ошибкой создания фигуры |

|reError | |

TTetrisGame - класс реализующий алгоритм игры. Включает в себя такие

объекты, как:

|fFiguresEnum |управление набором |Реализует хранение и доступ к массиву |

| |фигур |существующих фигур |

| |(TFigureEnumManager)| |

|fField |игровое поле |Предназначено для хранения указателя на |

| |(TField) |объект игровое поле |

|fCurrentFigure |текущая фигура |Предназначено для хранения указателя на |

| |(TBaseFigure) |текущую фигуру и проведения с ней всяких |

| | |операций типа вращения |

|fTimer |таймер (TTimer*) |Предназначен для появления событий в |

| | |программе через определенный промежуток |

| | |времени, чтобы реализовывать перемещение |

| | |фигуры |

поля:

|fQuickCoef |коэффициент |Предназначено для хранения коэффициента, |

| |ускорения (integer) |который используется при ускоренном |

| | |падении фигуры при нажатии клавиши |

|fInProcess |статус игры (byte) |Предназначено для хранения статуса игры |

|fFigNum |количество фигур |Предназначено для хранения числа |

| |(integer) |выпущенных фигур и отображении в |

| | |статистике |

|fTimerClicks |время игры (integer)|Предназначено для хранения времени игры и |

| | |отображении в статистике |

|fDeletedLines |число удаленных |Предназначено для хранения числа удаленных|

| |линий (integer) |линий и отображении в статистике |

|fOldTimer |интервал таймера |Интервал таймера до ускорения или 0 если |

| |(integer) |таймер находится не в ускоренном режиме |

события:

|TimerTick(Sender:TObject) |Событие от таймера. Происходит через заданный |

| |интервал времени |

методы:

|SetInProcess(AInProcess:byte) |Установка статуса игры. Использование данного |

| |метода, а не непосредственный доступ к полю |

| |гарантирует установку только допустимых значений и |

| |своевременное изменение строки статуса в основной |

| |форме |

|LogicalError(ErrMsg:PChar) |Вызывается при необходимости сообщить пользователю о|

| |произошедшей логической ошибке |

|InitCurrentFigure; |Создание текущей фигуры случайным образом. Указатель|

| |на текущую фигуру остается в fCurrentFigure |

|Start |Запуск игры или продолжение после приостановки |

|Stop |Остановка игры |

|Pause |Приостановка игры |

|NotActive:boolean |Проверяет не находиться ли игра в состоянии игры, |

| |если да выдается сообщение |

|IsGoing(ShowMsg:boolean=true) |Проверяет не активна ли игра. если нет и ShowMsg то |

| |выдается сообщение |

|ClearAll |Вызов очистки игрового поля, обнуление fFigNum, |

| |fDeletedLines, fTimerClicks |

|GetTextStatus:string |Получение статистики по игре в текстовом виде для |

| |вывода на экран |

|RotateAgainst |Проверка активна ли игра и есть ли текущая фигура, |

| |если да то происходит поворот фигуры |

|RotateAlong | |

|MoveLeft |Проверка активна ли игра и есть ли текущая фигура, |

| |если да то происходит сдвиг фигуры |

|MoveRight | |

|GetInfo |Получения статуса игры в текстовом виде для |

| |отображения в строке статуса |

|DoFall |Реализация метода падения (вызывается по клавиши |

| |вниз) |

|StartQuickFall(Quick:boolean=t|Если Quick то установка режима ускоренного падения, |

|rue) |нет возврат к обычному |

* Основными процедурами являются: TimerTick, DoFall

|TimerTick |Реакцию на событие от таймера можно представить |

| |следующим образом: |

| |Проверить есть текущая фигура |

| |Assigned(fCurrentFigure) |

| |Если есть проверить может ли она сдвинуться на |

| |клетку вниз fCurrentFigure.CanDown |

| |Если может, то сдвинуть fCurrentFigure.Down |

| |Иначе обрабатываем ситуацию упал (для бомб падение |

| |предполагает очистку других ячеек поля) |

| |fCurrentFigure.Falled |

| |Если нет, то проверяется заполненность хотя бы одной|

| |из линий поля полностью |

| |Если таковая находится то она удаляется |

| |fField.DelFullLine |

| |Иначе проверяется заполненность ячеек из вернего |

| |уровня fField.IsOverflow |

| |Если хотя бы одна занята - игра заканчивается |

| |Иначе создается очередная фигура случайным образом |

| |InitCurrentFigure |

|DoFall |Реакцию на событие от пользователя "отпускание |

| |фигуры" можно представить следующим образом: |

| |Проверить есть текущая фигура |

| |Assigned(fCurrentFigure) |

| |Если есть то пока она может сдвигаться вниз |

| |(fCurrentFigure.CanDown) |

| |сдвигать ее вниз (fCurrentFigure.Down) |

| |обрабатываем ситуацию упал (для бомб падение |

| |предполагает очистку других ячеек поля) |

| |fCurrentFigure.Falled |

|RotateAgainst, RotateAlong |Реакцию на событие от пользователя "поворот фигуры" |

| |можно представить следующим образом: |

| |Проверить идет ли игра и есть текущая фигура IsGoing|

| |and Assigned(fCurrentFigure) |

| |Если есть то повернуть фигуру |

| |fCurrentFigure:=fCurrentFigure.Rotate |

При выполнении перечисленных операций с фигурой совершенно не важно какая

она на самом деле. Операции проводятся с базовой фигурой, которая имеет

лишь методы по своему повороту, сдвигу. Реализация всех этих действий

выполняется в потомках объекта базовая фигура (TBaseFigure), перечисленных

ниже. В потомках даже приходиться лишь правильно определить координаты

относительно базовой точки, остальное сделает TBaseFigure!

TBaseFigure - класс базовая фигура позволяющий задать очертания фигуры и

методы по ее перемещению, повороту. Включает в себя следующие поля

|Cell |ячейка (TFieldCell) |Описание основной ячейки - цвет, текстура,|

| | |номер находящийся в ней. |

|Xbase |координата по X |Координаты базовой точки фигуры на поле |

| |(integer) | |

|Ybase |координата по Y | |

| |(integer) | |

|DownLimit |отступ снизу |Отступы вниз, влево, вправо от базовой |

| |(integer) |точки до границ фигуры, чтобы не вылазить |

| | |за границы поля при перемещении. Т.е. |

| | |общие очертания фигуры всегда |

| | |прямоугольник. Конкретно какие ячейки она |

| | |занимает в этом пространстве опредялются |

| | |для потомков индивидуально |

|RightLimit |отступ справа | |

| |(integer) | |

|LeftLimit |отступ слева | |

| |(integer) | |

методы:

|Rotate(AlongClock:boolean) |Реализует поворот фигуры по или против часовой |

| |стрелки |

|CanDown |Определяет - может ли фигура упасть на одну клетку |

| |вниз |

|Down |Реализует фактического падения фигуры |

|Move(Left:boolean;AField:TFiel|Реализует фактическое перемещение фигуры вправо или |

|d) |влево. |

|Falled |Реализует реакцию после того как фигура упала. |

| |Перекрыто в бомбе и очищает клетку под ней |

|MakeCurrent |Реализует фактическое рисование фигуры на поле |

|IsEmptyCell |Определяет свободна ли клетка (i,j) на поле |

|IsEmptyAndOnFieldCell |Определяет входит ли клетка (i,j) на поле и свободна|

| |ли она. При таком подходе работает быстрей чем два |

| |вызова - отдельная процедура "входит ли на поле" и |

| |"свободная ли она" |

|ClearCell(i,j:integer) |Реализует очистку одной клетки (i,j)принадлежащей |

| |фигуре |

|FillCell(i,j:integer) |Реализует рисование в определенную клетку (i,j) |

|AfterInit |Обеспечивает возможность изменения полей наследуемой|

| |фигуры |

|CheckEach(Proc:TCheckProc;Xabs|Конкретно определяет какие ячейки используются |

|,Yabs:integer) |фигурой. Процедура обязательно перекрывается в |

| |потомках. |

|ClearCurrent |Обеспечивает стирание фигуры с поля (перед шагом |

| |вниз/влево/вправо/падения) |

|GetTwinFigure(AlongClock:boole|Обеспечивает получение фигуры-близнеца. Т.е той |

|an) |фигуры, которая получается после поворота данной под|

| |углом 90 или -90 градусов. Перекрыто в конкретных |

| |потомках. Если нет, то поворот не осуществляется. |

| |Например для квадрата. |

|SetBaseCell |Обеспечивает установку конкретного номера текстуры в|

| |потомке, таким образом обеспечивается одна фигура, |

| |один цвет. |

Основными методами являются

|Rotate |Получить фигуру близнец. (GetTwinFigure) |

| |Если фигура близнец есть (TwinConstructor<>nil) |

| |то создаем фигуру близнец на основе своих параметров|

| |TwinConstructor.CreateTwin |

| |проверяем не залазит ли созданная фигура на клетки |

| |занятые другими фигурами Twin.CheckEach |

| |Если не залазит то |

| |Очистить все клетки занятые текущей фигурой |

| |(ClearCurrent) |

| |Нарисовать во все клетки фигуры близнеца |

| |(Twin.MakeCurrent) |

| |Возвратить как результат выполнения функции |

| |созданного близнеца (Rotate:=Twin) |

| |Освободить ресурсы занятые текущей фигурой (Free) |

| |Иначе если залазит то удалить созданного близнеца |

| |(Twin.Free) |

| |Возвратить как результат выполнения функции себя, |

| |так поворот не удался и фигура падает в прежнем виде|

| |(Rotate:=self) |

|CanDown |Проверить не выходит ли нижняя граница фигуры за |

| |пределы поля (Ybase>DownLimit) и проверить не |

| |попадают ли в случае перемещения вниз клетки данной |

| |фигуры на клетки другой фигуры |

| |CheckEach(IsEmptyCell,Xbase,Ybase-1) |

|Down |Очистить все клетки занятые фигурой (ClearCurrent) |

| |Уменьшить координату по Y базовой точки |

| |Нарисовать во все клетки фигуры (MakeCurrent) |

|Move |Если движение фигуры налево |

| |Проверить не выходит ли левая граница фигуры за |

| |пределы поля (Xbase>LeftLimit) и проверить не |

| |попадают ли в случае перемещения клетки данной |

| |фигуры на клетки другой фигуры |

| |CheckEach(IsEmptyCell,Xbase-1,Ybase) |

| |Если не попадает то |

| |Очистить все клетки занятые фигурой (ClearCurrent) |

| |Уменьшить координату по X базовой точки |

| |Нарисовать во все клетки фигуры (MakeCurrent) |

| |Если движение фигуры направо |

| |Проверить не выходит ли правая граница фигуры за |

| |пределы поля (Xbase

| |и проверить не попадают ли в случае перемещения |

| |клетки данной фигуры на клетки другой фигуры |

| |CheckEach(IsEmptyCell,Xbase+1,Ybase) |

| |Если не попадает то |

| |Очистить все клетки занятые фигурой (ClearCurrent) |

| |Увеличить координату по X базовой точки |

| |Нарисовать во все клетки фигуры (MakeCurrent) |

|MakeCurrent |Для всех клеток принадлежащих фигуре вызвать метод |

| |по рисованию ячейки (FillCell) |

|ClearCurrent |Для всех клеток принадлежащих фигуре вызвать метод |

| |по стиранию ячейки (ClearCell) |

Используются следующие потомки класса TBaseFigure

|TOneCellFigure |Одноклеточная фигура |

|TBombFigure |Бомба |

|TBombFigureExtra |Бомба-2 |

|TTwoCellFigureH |Двухклеточная фигура расположенная горизонтально |

|TTwoCellFigureV |Двухклеточная фигура расположенная вертикально |

|TThreeCellFigure13 |Трехклеточная прямая фигура расположенная |

| |горизонтально |

|TThreeCellFigure20 |Трехклеточная прямая фигура расположенная |

| |вертикально |

|TThreeCellFigure12 |Трехклеточный уголок. Соответствие цифр расположению|

| |фигуры на площади следующее: |

| |0 |

| |3 1 |

| |2 |

|TThreeCellFigure23 | |

|TThreeCellFigure30 | |

|TThreeCellFigure01 | |

|TFourCellBend0145 |Четырехклеточный изгиб извилистая дорога. |

| |Соответствие цифр расположению фигуры на площади |

| |следующее: 0 1 2 |

| |3 4 5 |

| |6 7 8 |

|TFourCellBend1436 | |

|TFourCellBend0347 | |

|TFourCellBend3412 | |

|TFourCellG1036 |Четырехлеточная фигура типа буквы L или Г. |

| |Соответствие цифр расположению фигуры на площади |

| |следующее: 0 1 2 |

| |3 4 5 |

| |6 7 8 |

|TFourCellG1476 | |

|TFourCellG0125 | |

|TFourCellG0345 | |

|TFourCellG0147 | |

|TFourCellG0367 | |

|TFourCellG3012 | |

|TFourCellG3452 | |

|TFourCellT0 |Четырехлеточная фигура типа буквы Т. Соответствие |

| |цифр расположению выпирающей клетки фигуры на |

| |площади следующее:0 |

| |3 1 |

| |2 |

|TFourCellT1 | |

|TFourCellT2 | |

|TFourCellT3 | |

|TFourCellFigureH |Четырехклеточная прямая фигура расположенная |

| |горизонтально |

|TFourCellFigureV |Четырехклеточная прямая фигура расположенная |

| |вертикально |

|TFourCellBox |Квадрат 2х2 |

Перекрытие виртуальных методов для реализации конкретной фигуры (например

TThreeCellFigure23) осуществляется следующим образом:

|AfterIni|LeftLimit:=1 |Установка значений отступов для данной фигуры. влево|

|t |DownLimit:=1 |на единицу и вниз на единицу |

|CheckEac|Proc(Xabs,Yabs-1)and |Вызов процедуры Proc для конретных ячеек. Обычно |

|h |Proc(Xabs,Yabs)and |вызываются процедуры для этих ячеек по рисованию, |

| |Proc(Xabs-1,Yabs) |стиранию, проверки отсутствия в данной ячейке другой|

| | |фигуры. |

| | |Для данной фигуры ячейками относящимися к данной |

| | |фигуре являются ячейки расположенные относительно |

| | |базовой |

| | |1) на одну ниже по Y, |

| | |2) в том же месте что и базовая |

| | |3) на одну левее по X |

|GetTwinF|if AlongClock then |Если вращение вдоль часовой стрелки то |

|igure |GetTwinFigure:=TThree|фигурой-близнецом будет TThreeCellFigure30 [pic] |

| |CellFigure30 |Если против часовой то TThreeCellFigure12 [pic] |

| |else | |

| |GetTwinFigure:=TThree| |

| |CellFigure12 | |

|SetBaseC|Cell.Color:=RandomCol|Установка определенных значений для текста и |

|ell |ors[25]; |текстуры фигуры данного типа |

| |Cell.TextureNum:=26 | |

Для остальных фигур перекрытие осуществляется аналогично.

TOptionsForm - класс формы настроек. Включает в себя такие объекты как:

|MainPageControl; |Закладки |Расположен на форме настроек, включает в |

| |(TPageControl*) |себя закладки (tabFigures) |

|tabFigures |Закладка |Расположена на MainPageControl, содержит |

| |(TTabSheet*) |на себе (FiguresListView) |

|FiguresListView |Просмотр списков |Предназначен для отображения списка фигур |

| |(TListView*) |используемых в проекте и расстановки им |

| | |свойства разрешения использования при |

| | |генерации |

|FiguresImageList |список изображений |Содержит список изображений используемый |

| |(TImageList*) |списком (FiguresListView) для отображения |

| | |пиктограмм фигур |

(* - помечены стандартные объекты Delphi)

методы:

|InitData |Помещает данные о разрешенных фигурах в список, |

| |отображаемый на форме |

|DoneData |Берет данные о разрешенных фигурах из списка, |

| |отображаемого на форме |

TFigureInfo - запись содержащая информацию о фигуре используемой при

случайной генерации

|Fig |TFigure |Тип одной из существующих фигур |

|Enabled |Boolean |Определяет разрешено ли создание данной |

| | |фигуры |

|FigureHint |string |Наименование фигуры, для отображения в |

| | |форме настроек. Если пусто фигура |

| | |самостоятельно не отображется, а считается|

| | |что она является близнецом для описанной |

| | |выше |

|Icon |integer |Индекс иконки в списке иконок для |

| | |отображения в форме настроек |

TFigureEnumManager - класс управляющий массивом записей типа TFigureInfo.

Включает в себя следующие методы:

|GetExistingFigure(Index:intege|Получение информации об определенной фигуре |

|r) | |

|LoadFiguresInfo(Reg:TRegistryD|Запись в реестр (registry) для сохранения настроек |

|ef) |между сеансами работы |

|SaveFiguresInfo(Reg:TRegistryD|Чтение из реестра |

|ef) | |

|GetIndexByName(const |Получение индекса фигуры в массиве по ее имени |

|Name:ShortString) | |

|GetAmount |Получение общего числа фигур в массиве |

|CreateRandomFigure |Получение фигуры случайным образом |

-----------------------

[pic]

Базовая точка