АЯиП отчеты по лабам (кроме 24) (Отчет18)

Посмотреть архив целиком

Лабораторная работа 18.

Графический режим. Наследование. Полиморфизм.



Задача: Разработать программу, содержащую описание трех графических объектов:

правильный треугольник, ромб, астроида.

Реализуя механизм полиморфизма, привести объекты в одновременное движение по экрану с отражением от его границ (угол падения равен углу отражения).




Объектная декомпозиция:


1


Главное окно приложения






2 3 2 3 2 3

Треугольник

Астроида

Ромб






1 – Активизировать

2 – Создать

3 – Перерисовать



Граф состояния интерфейса:




Главное

окно приложения













Диаграмма классов:




Текст программы:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;


type

TForm1 = class(TForm)

Image1: TImage;

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


type Tfigure = class

private

xc,yc:integer;


public

Image:Timage;

stepX,stepy:integer;

r:Integer;

procedure sdvig;

Constructor Create(aImage:Timage;ax,ay:Integer;ar:Integer);

Procedure Draw;virtual;abstract;

end;


type Ttreug = class(Tfigure)

public

x1,y1:Integer;

stepx1,stepy1:integer;

procedure Draw;override;

end;


type Tromb = class(Tfigure)

public

x2,y2:Integer;

stepx2,stepy2:integer;

procedure Draw;override;

end;


type Tastr = class(Tfigure)

public

x3,y3:Integer;

stepx3,stepy3:integer;

procedure Draw;override;

end;


var

Form1: TForm1;

move:boolean;

height,widtch,shx1,shy1,shx2,shy2,

shx3,shy3,xp,yp,xp2,yp2,yp3,xp3,i,i1,q:integer;


implementation

procedure Tfigure.sdvig;

begin

q:=q+1;

case q of

1:

begin

stepx:=shx1;

stepy:=shy1;

xp:=0;

yp:=0;

i:=0;

i1:=45;

widtch:=440;

height:=300;

end;

2:

begin

stepX:=shx2;

stepy:=shy2;

xp:=0;

yp:=0;

i:=0;

i1:=55;

widtch:=440;

height:=300;

end;

3:

begin

stepX:=shx3;

stepy:=shy3;

xp:=0;

yp:=0;

i:=0;

i1:=35;

widtch:=440;

height:=270;

end;

end;


if xc=widtch then stepx:=-1;

if yc=height then stepy:=-1;

if xc=i then stepx:=1;

if yc=i1 then stepy:=1;


xc:=xc+stepx;

yc:=yc+stepy;

case q of

1:

begin

shx1:=stepx;

shy1:=stepy;

end;

2:

begin

shx2:=stepx;

shy2:=stepy;

end;

3:

begin

shx3:=stepx;

shy3:=stepy;

end;

end;

end;


Constructor Tfigure.Create;

begin

Inherited Create;

Image:=aImage;

xc:=60;

yc:=170;

r:=30;

end;


procedure Ttreug.draw;

begin

x1:=xc;

y1:=yc;

image.Canvas.moveto(x1,y1);

image.Canvas.lineto(x1+60,y1);

image.Canvas.lineto(x1+30,y1-52);

image.Canvas.lineto(x1,y1);

end;


procedure Tromb.draw;

begin

x2:=xp2+xc;

y2:=yc;

image.canvas.moveto(x2,y2);

image.canvas.lineto(x2+30,y2-30);

image.canvas.lineto(x2,y2-60);

image.canvas.lineto(x2-30,y2-30);

image.canvas.lineto(x2,y2);

end;


procedure Tastr.draw;

begin

x3:=xp3+xc;

y3:=yc;

image.canvas.moveto(x3,y3);

image.canvas.Arc(X3,Y3,X3+60,Y3+60,X3+30,Y3, X3,Y3+30);

image.canvas.moveto(x3,y3-60);

image.canvas.Arc(X3,Y3-60, X3+60,Y3, X3,Y3-30, X3+30,Y3);

image.canvas.moveto(x3-60,y3-60);

image.canvas.Arc(X3-60,Y3-60, X3,Y3, X3-30,Y3, X3,Y3-30);

image.canvas.moveto(x3-60,y3);

image.canvas.Arc(X3-60,Y3, X3,Y3+60, X3,Y3+30, X3-30,Y3);

end;

{$R *.dfm}

procedure Tform1.Button1Click ;

var romb:tromb;

treug:ttreug;

astr:tastr;

figure:tfigure;

begin

xp:=30;

xp2:= 30;

xp3:= 30;

yp:=30;

yp3:= 30;

yp2:= 30;

shx1:=-1;

shy1:=1;

shx2:=1;

shy2:=-1;

shx3:=1;

shy3:=1;

Move:=true;

Image1.Canvas.Pen.Color:=clBlack;

treug:=ttreug.Create(form1.image1,150,200,60);

romb:=tromb.Create(form1.image1,250,200,60);

astr:=tastr.Create(form1.image1,350,200,60);

treug.draw;

romb.draw;

astr.draw;

repeat

Image1.Canvas.Pen.Color:=clWhite;

treug.draw;

romb.draw;

astr.draw;

Image1.Canvas.Pen.Color:=clBlack;

treug.sdvig;

treug.draw;

romb.sdvig;

romb.draw;

astr.sdvig;

astr.draw;

sleep(10);

application.ProcessMessages;

q:=0;

until not Move;

end;


procedure TForm1.Button2Click(Sender: TObject);

begin

move:=false;

close;

end;


procedure TForm1.FormCreate(Sender: TObject);

begin

Image1.Canvas.Brush.Color:=clwhite;

end;

end.


Случайные файлы

Файл
16463.rtf
153509.rtf
33846.rtf
58081.rtf
151300.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.