Помощь в обучении программированию — страница 6
вправо или влево. 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) Если движение фигуры направо
Похожие работы
- Рефераты