Помощь в обучении программированиюОписание классов TMainForm - класс основной формы проекта.
Включает в себя такие объекты, как MainToolBar | панель инструментов ( TToolBar *) | Расположена на форме в правой части и содержит в себе набор кнопок ( btnXXXX ) | btnXXXX | кнопки ( TButton *) | Расположены на панели инструментов и предназначены для удобного вызова заданных процедур | MainImageList | список изображений (TImageList*) | Содержит изображения иконок используемых кнопками ( btnXXXX ) | MainActionList | список действий (TActionList*) | Содержит перечень действий ( actXXXX ) используемый программой | 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 Cell:TFieldCell) | Установка в ячейку ( x , y ) значения Cell . Т.е. логическое получение занятой ячейки | GetAtCell (x,y:integer) | Получение значения из ячейки ( x , y ) | ClearAt (x,y:integer;CurCell:PFieldCell=nil) | Определяет свободна ли ячейка ( x , y ) логически и если указан CurCell то ячейка считается свободной даже когда там находится значения совпадающее с CurCell . | DelFullLine | Удаление одной из полностью занятых строк. | IsOverflow | Проверка на переполнение.
Переполненным полем считается поле для которого хотя бы одна ячейка верхних ReservedLines занята | DeleteFigure(FigureNum:integer) | Удаление с поля фигуры с номером FigureNum. Используется при падении Бомбы-2 | DrawToImage | Прорисовка текущего состояния поля | Игра может находится в одном из логических состояний: gmNothing | Игра не начата | gmActive=1 | Игра идет | gmSuspend=2 | Игра приостановлена | gmEnded=3 | Игра завершена | gmAborted=4 | Игра прервана пользователем | gmGraphicError | Игра завершена с ошибкой во время рисования | gmCreateFigureError | Игра завершена с ошибкой создания фигуры | TTetrisGame - класс реализующий алгоритм игры.
Включает в себя такие объекты, как: fFiguresEnum | управление набором фигур ( TFigureEnumManager ) | Реализует хранение и доступ к массиву существующих фигур | fField | игровое поле ( TField ) | Предназначено для хранения указателя на объект игровое поле | fCurrentFigure | текущая фигура ( TBaseFigure ) | Предназначено для хранения указателя на текущую фигуру и проведения с ней всяких операций типа вращения | fTimer | таймер ( TTimer *) | Предназначен для появления событий в программе через определенный промежуток времени, чтобы реализовывать перемещение фигуры | поля: fQuickCoef | коэффициент ускорения ( integer ) | Предназначено для хранения коэффициента, который используется при ускоренном падении фигуры при нажатии клавиши | fInProcess | статус игры ( byte ) | Предназначено для хранения статуса игры | fFigNum | количество фигур ( integer ) | Предназначено для хранения числа выпущенных фигур и отображении в статистике | fTimerClicks | время игры (integer) | Предназначено для хранения времени игры и отображении в статистике | fDeletedLines | число удаленных линий ( integer ) | Предназначено для хранения числа удаленных линий и отображении в статистике | fOldTimer | интервал таймера ( integer ) | Интервал таймера до ускорения или 0 если таймер находится не в ускоренном режиме | события: 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=true) | Если Quick то установка режима ускоренного падения, нет возврат к обычному | * Основными процедурами являются: 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 ) | Координаты базовой точки фигуры на поле | Y base | координата по 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 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 | TFourCellG 1036 | Четырехлеточная фигура типа буквы L или Г. Соответствие цифр расположению фигуры на площади следующее: 0 1 2 3 4 5 6 7 8 | TFourCellG1476 | TFourCellG0125 | TFourCellG0345 | TFourCellG0147 | TFourCellG0367 | TFourCellG3012 | TFourCellG3452 | TFourCellT 0 | Четырехлеточная фигура типа буквы Т. Соответствие цифр расположению выпирающей клетки фигуры на площади следующее: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 для конретных ячеек.
|
Лучшие работы
Подобные работы echo "Приказ по институту N ___ от _______ 3. Назначение для разработки.
Комплекс программ предназначен для того и должен быть построен таким образом, чтобы осуществлялось максимально удобное построе echo "Обучение в Учреждении ведётся на русском языке.
Порядок приёма на ступени дошкольного, начального основного среднего образования обеспечивает реализацию права ребёнка на образование без всяких echo "Описание классов TMainForm - класс основной формы проекта.
Включает в себя такие объекты, как MainToolBar панель инструментов ( TToolBar *) Расположена на форме в правой части и содержит echo "Найдем площадь криволинейной трапеции aABb (рис. 1). "; echo ''; echo " рис. 1 Для этого разделим отрезок [ a , b ] точкой c = ( a + b ) / 2 пополам и в точке C ( c , f ( c ) ) проведем касатель echo "Применение стандарта MARC в библиотеке, которая до этого работала с каталожными карточками, заметно увеличит скорость работы, то есть не будет необходимости стоять 'бог знает сколько времени' у
|