tetris (Помощь в обучении программированию), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Помощь в обучении программированию", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "tetris"

Текст 2 страницы из документа "tetris"

TBaseFigure - класс базовая фигура позволяющий задать очертания фигуры и методы по ее перемещению, повороту. Включает в себя следующие поля

Cell

ячейка (TFieldCell)

Описание основной ячейки - цвет, текстура, номер находящийся в ней.

Xbase

координата по X (integer)

Координаты базовой точки фигуры на поле

Ybase

координата по 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

Если не попадает то

Очистить все клетки занятые фигурой (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

TFourCellG1036

Четырехлеточная фигура типа буквы L или Г. Соответствие цифр расположению фигуры на площади следующее: 0 1 2

3 4 5

6 7 8

TFourCellG1476

TFourCellG0125

TFourCellG0345

TFourCellG0147

TFourCellG0367

TFourCellG3012

TFourCellG3452

TFourCellT0

Четырехлеточная фигура типа буквы Т. Соответствие цифр расположению выпирающей клетки фигуры на площади следующее: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 для конретных ячеек. Обычно вызываются процедуры для этих ячеек по рисованию, стиранию, проверки отсутствия в данной ячейке другой фигуры.

Для данной фигуры ячейками относящимися к данной фигуре являются ячейки расположенные относительно базовой

1) на одну ниже по Y,

2) в том же месте что и базовая

3) на одну левее по X

GetTwinFigure

if AlongClock then

GetTwinFigure:=TThreeCellFigure30

else

GetTwinFigure:=TThreeCellFigure12

Если вращение вдоль часовой стрелки то фигурой-близнецом будет TThreeCellFigure30

Если против часовой то TThreeCellFigure12

SetBaseCell

Cell.Color:=RandomColors[25];

Cell.TextureNum:=26

Установка определенных значений для текста и текстуры фигуры данного типа

Для остальных фигур перекрытие осуществляется аналогично.

TOptionsForm - класс формы настроек. Включает в себя такие объекты как:

MainPageControl;

Закладки (TPageControl*)

Расположен на форме настроек, включает в себя закладки (tabFigures)

tabFigures

Закладка (TTabSheet*)

Расположена на MainPageControl, содержит на себе (FiguresListView)

FiguresListView

Просмотр списков (TListView*)

Предназначен для отображения списка фигур используемых в проекте и расстановки им свойства разрешения использования при генерации

FiguresImageList

список изображений (TImageList*)

Содержит список изображений используемый списком (FiguresListView) для отображения пиктограмм фигур

(* - помечены стандартные объекты Delphi)

методы:

InitData

Помещает данные о разрешенных фигурах в список, отображаемый на форме

DoneData

Берет данные о разрешенных фигурах из списка, отображаемого на форме

TFigureInfo - запись содержащая информацию о фигуре используемой при случайной генерации

Fig

TFigure

Тип одной из существующих фигур

Enabled

Boolean

Определяет разрешено ли создание данной фигуры

FigureHint

string

Наименование фигуры, для отображения в форме настроек. Если пусто фигура самостоятельно не отображется, а считается что она является близнецом для описанной выше

Icon

integer

Индекс иконки в списке иконок для отображения в форме настроек

TFigureEnumManager - класс управляющий массивом записей типа TFigureInfo. Включает в себя следующие методы:

GetExistingFigure(Index:integer)

Получение информации об определенной фигуре

LoadFiguresInfo(Reg:TRegistryDef)

Запись в реестр (registry) для сохранения настроек между сеансами работы

SaveFiguresInfo(Reg:TRegistryDef)

Чтение из реестра

GetIndexByName(const Name:ShortString)

Получение индекса фигуры в массиве по ее имени

GetAmount

Получение общего числа фигур в массиве

CreateRandomFigure

Получение фигуры случайным образом

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее