Реферат: Помощь в обучении программированию
Если фигура близнец есть (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<AField.FieldCountX-RightLimit-1) и проверить не попадают ли в случае перемещения клетки данной фигуры на клетки другой фигуры CheckEach(IsEmptyCell,Xbase+1,Ybase)
Если не попадает то
Очистить все клетки занятые фигурой (ClearCurrent)
Увеличить координату по X базовой точки
Нарисовать во все клетки фигуры (MakeCurrent)