Подскажите пожалуйста, что в этой задаче не так...Надо ли описывать TPoint? Совсем запуталась(
unit Star1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
StarPtr = ^Star;
Star=class
m:array[1..3] of TPoint;
n:array[1..3] of TPoint;
constructor Create(InitX,InitY: integer);
Procedure StarShow; virtual;
Procedure StarHide; virtual;
end;
RombPtr = ^Romb;
Romb=class
k:array[1..4] of TPoint;
constructor Create(InitX,InitY: integer);
Procedure RombShow; virtual;
Procedure RombHide; virtual;
end;
PolygonPtr = ^Polygon;
Polygon=class
b:array[1..3] of TPoint;
constructor Create(InitX,InitY: integer);
Procedure PolygonShow; virtual;
Procedure PolygonHide; virtual;
end;
NodePtr = ^Node;
Node = record
Item: PointPtr;
Next: NodePtr;
end;
ListPtr = ^List;
List = object
Nodes: NodePtr;
constructor Init;
destructor Done; virtuаl;
procedure add(Item : PointPtr);
procedure Report;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Temp: String;
aList: List;
implementation
{$R *.DFM}
Constructor Star.Create(InitX,InitY: integer);
begin
m[1].x:=800;
m[1].y:=550;
m[2].x:=m[1].x+150;
m[2].y:=m[1].y+200;
m[3].x:=m[1].x-150;
m[3].y:=m[1].y+200;
n[1].x:=m[1].x;
n[1].y:=m[1].y+260;
n[2].x:=n[1].x+150;
n[2].y:=n[1].y-200;
n[3].x:=n[1].x-150;
n[3].y:=n[1].y-200;
end;
Procedure Star.StarShow;
const w=10;
var color: TColor;
begin
randomize;
Form1.Canvas.Pen.Width:=random(w);
Form1.Canvas.Pen.Color:=random(color);
Form1.Canvas.Brush.Color:=Form1.Canvas.Pen.Color;
Form1.Canvas.Star(m);
Form1.Canvas.Star(n);
end;
Procedure Star.StarHide;
begin
Form1.Canvas.Pen.Color:=Form1.Color;
Form1.Canvas.Brush.Color:=Form1.Color;
Form1.Canvas.Star(m);
Form1.Canvas.Star(n);
end;
Constructor Romb.Create(InitX,InitY: integer);
begin
k[1].x:=800;
k[1].y:=550;
k[2].x:=k[1].x+100;
k[2].y:=k[1].y+150;
k[3].x:=k[1].x;
k[3].y:=k[1].y+300;
k[4].x:=k[1].x-100;
k[4].y:=k[1].y+150;
end;
Procedure Romb.RombShow;
const w=10;
var color: TColor;
begin
randomize;
Form1.Canvas.Pen.Width:=random(w);
Form1.Canvas.Pen.Color:=random(color);
Form1.Canvas.Brush.Color:=Form1.Canvas.Pen.Color;
Form1.Canvas.Romb(k);
end;
Procedure Romb.RombHide;
begin
Form1.Canvas.Pen.Color:=Form1.Color;
Form1.Canvas.Brush.Color:=Form1.Color;
Form1.Canvas.Romb(k);
end;
Constructor Polygon.Create(InitX,InitY: integer);
begin
m[1].x:=520;
m[1].y:=380;
m[2].x:=m[1].x+150;
m[2].y:=m[1].y+200;
m[3].x:=m[1].x-150;
m[3].y:=m[1].y+200;
end;
Procedure Polygon.PolygonShow;
const w=10;
var color: TColor;
begin
randomize;
Form1.Canvas.Pen.Width:=random(w);
Form1.Canvas.Pen.Color:=random(color);
Form1.Canvas.Brush.Color:=Form1.Canvas.Pen.Color;
Form1.Canvas.Polygon(b);
end;
Procedure Polygon.PolygonHide;
begin
Form1.Canvas.Pen.Color:=Form1.Color;
Form1.Canvas.Brush.Color:=Form1.Color;
Form1.Canvas.Polygon(b);
end;
constructor List.Init;
begin Nodes:=nil;
end;
destructor List.Destroy;
begin
while Nodes <> nil do
begin
Star:=Nodes;
Dispose(Star^.Item, Done);
Nodes:=Star^.Next;
Dispose(Star);
Romb:=Nodes;
Dispose(Romb^.Item, Done);
Nodes:=Romb^.Next;
Dispose(Romb);
Polygon:=Nodes;
Dispose(Polygon^.Item, Done);
Nodes:=Polygon^.Next;
Dispose(Polygon);
end;
end;
procedure List.add(Item : PointPtr);
begin
New(Star);
Star^.Item:=Item;
Star^.Next:=Nodes;
Nodes:=Star;
New(Romb);
Romb^.Item:=Item;
Romb^.Next:=Nodes;
Nodes:=Romb;
New(Polygon);
Polygon^.Item:=Item;
Polygon^.Next:=Nodes;
Nodes:=Polygon;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aList.Init;
aList.add(New(StarPtr, Init(200,330)));
aList.add(New(RombPtr, Init(300,450)));
aList.add(New(PolygonPtr, Init(250,420)));
aList.Report;
aList.Done;
end;
end.