Помощь в обучении программированию
Помощь в обучении программированию
Наше предложение для тех, кто хочет научиться программировать на 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] Базовая точка