Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы к ДЗ.doc
Скачиваний:
6
Добавлен:
09.02.2015
Размер:
472.06 Кб
Скачать

Домашнее задание 3. Практикум 18. Использование объектной технологии для построения движущихся фигур.

Для выполнения этого домашнего задания необходима тщательная проработка предыдущего практикума, где рассмотрены основные приемы объектно-ориентированного программирования.

Учебная задача имеет своей целью показать практику использования объектной технологии для создания различного рода программ – симуляторов ситуационного поведения, обучающих принятию решений в условиях возникновения сложных многофакторных ситуаций.

Основным отличительным признаком таких программ является отображение на экране движения нескольких разнородных фигур. Причем как время их возникновения или исчезновения, так и траектории движения могут изменяться. Мы будем решать эту задачу в упрощенном варианте, когда вид фигур и их траектории движения считаются заданными (см. свой вариант).

В этом и последующих практикумах будет рассматриваться фигура, состоящая из 4 прямоугольных равнобедренных треугольников.

Последовательность разработки.

Этап 1. Выбор области рисования и положения системы координат. На этом этапе создается базовый класс cDecart. Его объявление приведено ниже.

Листинг 18а. Объявление класса cDecart.

Type

TRPoint=record

X, y : real;

end;

cDecart=class

protected

t0 : TPoint;

mx : real;

cnv : TCanvas;

public

Constructor Init(fx0, fy0 : integer;

fmx : real;

fcnv : TCanvas);

Procedure Draw;

Function tpix(tr : TRPoint):TPoint;

end;

Реализация методов класса.

Procedure cDecart.Draw;

Const border=20;

Begin

// Добавлена очистка области рисования (фрагмент ниже)

cnv.Brush.Color:=clWhite;

cnv.Pen.Color:=clWhite;

cnv.Rectangle(border, border,

2*T0.X-border, 2*t0.Y-border);

// Далее по тексту рисование осей координат, как и раньше

. . . . . . . . . .

// Реализация функции пересчета

Function cDecart.tpix(tr : TRPoint):TPoint;

Begin

Result.X:=t0.X + round(mx*tr.x);

Result.Y:=t0.Y - round(mx*tr.y);

End;

Этап 2. Проектирование производного класса «закрашенный треугольник» с вершинами apex, центром вращения tc и цветом cl. Пока все очень упрощенно с конструктором из декартовых координат для данного примера.

Листинг 18б. Объявление класса cTri.

Type cTri=class(cDecart)

apex : array[1..3] of TRPoint;

tc : TRPoint;

cl : TColor;

public

Constructor Init(fx0, fy0 : integer;

fmx : real;

fcnv : TCanvas;

x1, y1, x2, y2,

X3, y3 : real;

ftc : TRPoint;

fcl : TColor);

Procedure Draw;

end;

Реализация конструктора и методов.

Constructor cTri.Init(fx0, fy0 : integer;

fmx : real; fcnv : TCanvas;

X1, y1, x2, y2, x3, y3 : real;

ftc : TRPoint; fcl : TColor);

Begin

Inherited Init(fx0, fy0, fmx, fcnv);

apex[1].x:=x1; apex[1].y:=y1;

apex[2].x:=x2; apex[2].y:=y2;

apex[3].x:=x3; apex[3].y:=y3;

tc:=ftc; cl:=fcl;

End;

Напомню, что тип TPoint, который используется в Polygon, взят из WINDOWS, а тип TRPoint объявлен в UDecart

Procedure cTri.Draw;