Наше предложение для тех, кто хочет научиться программировать на 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 | список действий (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 если таймер находится не в ускоренном режиме |
события: