Куча прог на С++ (Отчет по Теме 18)

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


Отчет по Теме 18

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

Малышев Егор АК5-21



Условие:

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

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

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


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

unit N18;


interface


uses

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

Dialogs, StdCtrls, ExtCtrls, Figure;


type

TForm1 = class(TForm)

Image1: TImage;

Button1: TButton;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


x:integer=10;

x1:integer=90;

x2:integer=170;


y:integer=390;


dy:integer=1;


Kvad:Tkvadrat;

Shest:Tshest;

Vosm:Tvosm;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);

begin

Timer1.Enabled:=not(timer1.enabled);

end;


procedure TForm1.FormCreate(Sender: TObject);

begin

Kvad:= Tkvadrat.Create;

Shest:=Tshest.Create;

Vosm:=TVosm.Create;


Kvad.Canvas:= Form1.Image1.Canvas;

Shest.Canvas:=Form1.Image1.Canvas;

Vosm.Canvas:= Form1.Image1.Canvas;

end;


procedure TForm1.Timer1Timer(Sender: TObject);

begin

if ((y-60)<=0) or (y>=400) then begin

dy:=-dy;

end;

y:=y-dy;

PatBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,WHITENESS);

//image1.Canvas.Brush.Color:=clwhite;

//image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);

Kvad.Draw(x,y,-dy);

Shest.Draw(x1,y,-dy);

Vosm.Draw(x2,y,-dy);

end;


end.







































unit Figure;


interface Uses graphics,ExtCtrls,stdctrls,windows;


Type

TKvadrat=class

Color:tcolor;

Canvas:Tcanvas;

procedure Draw(x,y,dy:integer);virtual;

end;


TShest=class (TKvadrat)

procedure Draw(x,y,dy:integer);override;

end;


TVosm=class (Tkvadrat)

procedure Draw(x,y,dy:integer);override;

end;


implementation


procedure Tkvadrat.Draw;

var i:integer;

begin

{self.Canvas.Pen.Color:=clwhite;

if dy>0 then

for i := 0 to 2 do begin

self.canvas.MoveTo(x,y-i);

self.Canvas.lineto(x,y-60-i);

self.Canvas.lineto(x+60,y-60-i);

self.Canvas.lineto(x+60,y-i);

self.Canvas.lineto(x,y-i);

end else

for i := 0 downto -2 do begin

self.canvas.MoveTo(x,y-i);

self.Canvas.lineto(x,y-60-i);

self.Canvas.lineto(x+60,y-60-i);

self.Canvas.lineto(x+60,y-i);

self.Canvas.lineto(x,y-i);

end; }

self.Canvas.Pen.Color:=clblack;

y:=y+dy;

self.canvas.MoveTo(x,y);

self.Canvas.lineto(x,y-60);

self.Canvas.lineto(x+60,y-60);

self.Canvas.lineto(x+60,y);

self.Canvas.lineto(x,y);

end;


Procedure Tshest.Draw;

var i:integer;

begin

{self.Canvas.Pen.Color:=clwhite;

if dy>0 then

for i := 0 to 2 do begin

self.canvas.MoveTo(x,y-30-i);

self.Canvas.lineto(x+15,round(y-30-sqrt(3)*15)-i);

self.Canvas.lineto(x+45,round(y-30-sqrt(3)*15)-i);

self.Canvas.lineto(x+60,y-30-i);

self.Canvas.lineto(x+45,round(y-30+sqrt(3)*15)-i);

self.Canvas.lineto(x+15,round(y-30+sqrt(3)*15)-i);

self.Canvas.lineto(x,y-30-i);

end else

for i := 0 downto -2 do begin

self.canvas.MoveTo(x,y-30-i);

self.Canvas.lineto(x+15,round(y-30-sqrt(3)*15)-i);

self.Canvas.lineto(x+45,round(y-30-sqrt(3)*15)-i);

self.Canvas.lineto(x+60,y-30-i);

self.Canvas.lineto(x+45,round(y-30+sqrt(3)*15)-i);

self.Canvas.lineto(x+15,round(y-30+sqrt(3)*15)-i);

self.Canvas.lineto(x,y-30-i);

end; }

// self.Canvas.Polyline(x,y-30,x+15,round(y-30-sqrt(3)*15),x+45,round(y-30-sqrt(3)*15),x+60,y-30,x+45,round(y-30+sqrt(3)*15),x+15,round(y-30+sqrt(3)*15),x,y-30);

self.Canvas.Pen.Color:=clblack;

y:=y+dy;

self.canvas.MoveTo(x,y-30);

self.Canvas.lineto(x+15,round(y-30-sqrt(3)*15));

self.Canvas.lineto(x+45,round(y-30-sqrt(3)*15));

self.Canvas.lineto(x+60,y-30);

self.Canvas.lineto(x+45,round(y-30+sqrt(3)*15));

self.Canvas.lineto(x+15,round(y-30+sqrt(3)*15));

self.Canvas.lineto(x,y-30);

end;


Procedure Tvosm.Draw;

var i:integer;

begin

{self.Canvas.Pen.Color:=clwhite;

if dy>0 then

for i := 0 to 2 do begin

self.canvas.MoveTo(x,y-15-i);

self.Canvas.lineto(x,y-45-i);

self.Canvas.lineto(x+15,y-60-i);

self.Canvas.lineto(x+45,y-60-i);

self.Canvas.lineto(x+60,y-45-i);

self.Canvas.lineto(x+60,y-15-i);

self.Canvas.lineto(x+45,y-i);

self.Canvas.lineto(x+15,y-i);

self.Canvas.lineto(x,y-15-i);

end else

for i := 0 downto -2 do begin

self.canvas.MoveTo(x,y-15-i);

self.Canvas.lineto(x,y-45-i);

self.Canvas.lineto(x+15,y-60-i);

self.Canvas.lineto(x+45,y-60-i);

self.Canvas.lineto(x+60,y-45-i);

self.Canvas.lineto(x+60,y-15-i);

self.Canvas.lineto(x+45,y-i);

self.Canvas.lineto(x+15,y-i);

self.Canvas.lineto(x,y-15-i);

end;

PatBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,WHITENESS);

}

// self.Canvas.Polyline(x,y-15,x,y-45,x+15,y-60,x+45,y-60,x+60,y-45,x+60,y-15,x+45,y,x+15,y,x,y-15);

self.Canvas.Pen.Color:=clblack;

y:=y+dy;

self.canvas.MoveTo(x,y-15);

self.Canvas.lineto(x,y-45);

self.Canvas.lineto(x+15,y-60);

self.Canvas.lineto(x+45,y-60);

self.Canvas.lineto(x+60,y-45);

self.Canvas.lineto(x+60,y-15);

self.Canvas.lineto(x+45,y);

self.Canvas.lineto(x+15,y);

self.Canvas.lineto(x,y-15);

end;


end.


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

Файл
11913-1.rtf
59162.rtf
58160.rtf
162737.rtf
11838.rtf




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