МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Помощь в обучении программированию

    Помощь в обучении программированию

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

    | |(TActionList*) |используемый программой |

    |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 |Установка в ячейку (x,y) значения Cell. Т.е. |

    |Cell:TFieldCell) |логическое получение занятой ячейки |

    |GetAtCell (x,y:integer) |Получение значения из ячейки (x,y) |

    |ClearAt |Определяет свободна ли ячейка (x,y) логически и если|

    |(x,y:integer;CurCell:PFieldCel|указан CurCell то ячейка считается свободной даже |

    |l=nil) |когда там находится значения совпадающее с CurCell. |

    |DelFullLine |Удаление одной из полностью занятых строк. |

    |IsOverflow |Проверка на переполнение. Переполненным полем |

    | |считается поле для которого хотя бы одна ячейка |

    | |верхних ReservedLines занята |

    |DeleteFigure(FigureNum:integer|Удаление с поля фигуры с номером FigureNum. |

    |) |Используется при падении Бомбы-2 |

    |DrawToImage |Прорисовка текущего состояния поля |

    Игра может находится в одном из логических состояний:

    |gmNothing |Игра не начата |

    |gmActive=1 |Игра идет |

    |gmSuspend=2 |Игра приостановлена |

    |gmEnded=3 |Игра завершена |

    |gmAborted=4 |Игра прервана пользователем |

    |gmGraphicErr|Игра завершена с ошибкой во время рисования |

    |or | |

    |gmCreateFigu|Игра завершена с ошибкой создания фигуры |

    |reError | |

    TTetrisGame - класс реализующий алгоритм игры. Включает в себя такие

    объекты, как:

    |fFiguresEnum |управление набором |Реализует хранение и доступ к массиву |

    | |фигур |существующих фигур |

    | |(TFigureEnumManager)| |

    |fField |игровое поле |Предназначено для хранения указателя на |

    | |(TField) |объект игровое поле |

    |fCurrentFigure |текущая фигура |Предназначено для хранения указателя на |

    | |(TBaseFigure) |текущую фигуру и проведения с ней всяких |

    | | |операций типа вращения |

    |fTimer |таймер (TTimer*) |Предназначен для появления событий в |

    | | |программе через определенный промежуток |

    | | |времени, чтобы реализовывать перемещение |

    | | |фигуры |

    поля:

    |fQuickCoef |коэффициент |Предназначено для хранения коэффициента, |

    | |ускорения (integer) |который используется при ускоренном |

    | | |падении фигуры при нажатии клавиши |

    |fInProcess |статус игры (byte) |Предназначено для хранения статуса игры |

    |fFigNum |количество фигур |Предназначено для хранения числа |

    | |(integer) |выпущенных фигур и отображении в |

    | | |статистике |

    |fTimerClicks |время игры (integer)|Предназначено для хранения времени игры и |

    | | |отображении в статистике |

    |fDeletedLines |число удаленных |Предназначено для хранения числа удаленных|

    | |линий (integer) |линий и отображении в статистике |

    |fOldTimer |интервал таймера |Интервал таймера до ускорения или 0 если |

    | |(integer) |таймер находится не в ускоренном режиме |

    события:

    |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=t|Если Quick то установка режима ускоренного падения, |

    |rue) |нет возврат к обычному |

    * Основными процедурами являются: TimerTick, DoFall

    |TimerTick |Реакцию на событие от таймера можно представить |

    | |следующим образом: |

    | |Проверить есть текущая фигура |

    | |Assigned(fCurrentFigure) |

    | |Если есть проверить может ли она сдвинуться на |

    | |клетку вниз fCurrentFigure.CanDown |

    | |Если может, то сдвинуть fCurrentFigure.Down |

    | |Иначе обрабатываем ситуацию упал (для бомб падение |

    | |предполагает очистку других ячеек поля) |

    | |fCurrentFigure.Falled |

    | |Если нет, то проверяется заполненность хотя бы одной|

    | |из линий поля полностью |

    | |Если таковая находится то она удаляется |

    | |fField.DelFullLine |

    | |Иначе проверяется заполненность ячеек из вернего |

    | |уровня fField.IsOverflow |

    | |Если хотя бы одна занята - игра заканчивается |

    | |Иначе создается очередная фигура случайным образом |

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.