tetris (Помощь в обучении программированию), страница 2
Описание файла
Документ из архива "Помощь в обучении программированию", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "tetris"
Текст 2 страницы из документа "tetris"
TBaseFigure - класс базовая фигура позволяющий задать очертания фигуры и методы по ее перемещению, повороту. Включает в себя следующие поля
Cell | ячейка (TFieldCell) | Описание основной ячейки - цвет, текстура, номер находящийся в ней. |
Xbase | координата по X (integer) | Координаты базовой точки фигуры на поле |
Ybase | координата по Y (integer) | |
DownLimit | отступ снизу (integer) | Отступы вниз, влево, вправо от базовой точки до границ фигуры, чтобы не вылазить за границы поля при перемещении. Т.е. общие очертания фигуры всегда прямоугольник. Конкретно какие ячейки она занимает в этом пространстве опредялются для потомков индивидуально |
RightLimit | отступ справа (integer) | |
LeftLimit | отступ слева (integer) |
методы:
Rotate(AlongClock:boolean) | Реализует поворот фигуры по или против часовой стрелки |
CanDown | Определяет - может ли фигура упасть на одну клетку вниз |
Down | Реализует фактического падения фигуры |
Move(Left:boolean;AField:TField) | Реализует фактическое перемещение фигуры вправо или влево. |
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:boolean) | Обеспечивает получение фигуры-близнеца. Т.е той фигуры, которая получается после поворота данной под углом 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 Если не попадает то Очистить все клетки занятые фигурой (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) осуществляется следующим образом:
AfterInit | LeftLimit:=1 DownLimit:=1 | Установка значений отступов для данной фигуры. влево на единицу и вниз на единицу |
CheckEach | Proc(Xabs,Yabs-1)and Proc(Xabs,Yabs)and Proc(Xabs-1,Yabs) | Вызов процедуры Proc для конретных ячеек. Обычно вызываются процедуры для этих ячеек по рисованию, стиранию, проверки отсутствия в данной ячейке другой фигуры. Для данной фигуры ячейками относящимися к данной фигуре являются ячейки расположенные относительно базовой 1) на одну ниже по Y, 2) в том же месте что и базовая 3) на одну левее по X |
GetTwinFigure | if AlongClock then GetTwinFigure:=TThreeCellFigure30 else GetTwinFigure:=TThreeCellFigure12 | Если вращение вдоль часовой стрелки то фигурой-близнецом будет TThreeCellFigure30 Если против часовой то TThreeCellFigure12 |
SetBaseCell | Cell.Color:=RandomColors[25]; Cell.TextureNum:=26 | Установка определенных значений для текста и текстуры фигуры данного типа |
Для остальных фигур перекрытие осуществляется аналогично.
TOptionsForm - класс формы настроек. Включает в себя такие объекты как:
MainPageControl; | Закладки (TPageControl*) | Расположен на форме настроек, включает в себя закладки (tabFigures) |
tabFigures | Закладка (TTabSheet*) | Расположена на MainPageControl, содержит на себе (FiguresListView) |
FiguresListView | Просмотр списков (TListView*) | Предназначен для отображения списка фигур используемых в проекте и расстановки им свойства разрешения использования при генерации |
FiguresImageList | список изображений (TImageList*) | Содержит список изображений используемый списком (FiguresListView) для отображения пиктограмм фигур |
(* - помечены стандартные объекты Delphi)
методы:
InitData | Помещает данные о разрешенных фигурах в список, отображаемый на форме |
DoneData | Берет данные о разрешенных фигурах из списка, отображаемого на форме |
TFigureInfo - запись содержащая информацию о фигуре используемой при случайной генерации
Fig | TFigure | Тип одной из существующих фигур |
Enabled | Boolean | Определяет разрешено ли создание данной фигуры |
FigureHint | string | Наименование фигуры, для отображения в форме настроек. Если пусто фигура самостоятельно не отображется, а считается что она является близнецом для описанной выше |
Icon | integer | Индекс иконки в списке иконок для отображения в форме настроек |
TFigureEnumManager - класс управляющий массивом записей типа TFigureInfo. Включает в себя следующие методы:
GetExistingFigure(Index:integer) | Получение информации об определенной фигуре |
LoadFiguresInfo(Reg:TRegistryDef) | Запись в реестр (registry) для сохранения настроек между сеансами работы |
SaveFiguresInfo(Reg:TRegistryDef) | Чтение из реестра |
GetIndexByName(const Name:ShortString) | Получение индекса фигуры в массиве по ее имени |
GetAmount | Получение общего числа фигур в массиве |
CreateRandomFigure | Получение фигуры случайным образом |