Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2004 ИС (Илюшечкин) / ВМИП / Labs / laba4var19(Canvas) / Airplain
.pas unit Airplain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfmAirplain = class(TForm)
btGo: TButton;
procedure Draw(Sender: TObject);
procedure btGoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmAirplain: TfmAirplain;
stars:array[1..1000]of tpoint;
k:array[1..39] of TPoint=( (x:10;y:142), //1
(x:10;y:160), //2
(x:16;y:172), //3
(x:18;y:176), //4
(x:26;y:168), //5
(x:38;y:168), //6
(x:42;y:176), //7
(x:50;y:184), //8
(x:54;y:176), //9
(x:56;y:182), //10
(x:61;y:179), //11
(x:62;y:184), //12
(x:66;y:176), //13
(x:102;y:176), //14
(x:104;y:183), //15
(x:109;y:181), //16
(x:110;y:184), //17
(x:114;y:176), //18
(x:115;y:179), //19
(x:120;y:177), //20
(x:122;y:184), //21
(x:138;y:176), //22
(x:142;y:176), //23
(x:140;y:184), //24
(x:146;y:186), //25
(x:166;y:184), //26
(x:150;y:196), //27
(x:72;y:196), //28
(x:42;y:192), //29
(x:42;y:208), //30
(x:38;y:176), //31
(x:24;y:187), //32
(x:18;y:192), //33
(x:18;y:208), //34
(x:10;y:192), //35
(x:138;y:172), //a1-36
(x:166;y:196), //a2-37
(x:18;y:160), //3a-38
(x:122;y:176));//21a-39
implementation
{$R *.dfm}
{$J+}
{$WRITEABLECONST ON}
procedure TfmAirplain.Draw(Sender: TObject);
var
counter:integer;
procedure prFillcolor(a,b:LongWord); //Процедура установки цвета пера и цвета кисти
begin
with fmAirplain.Canvas do
begin
Pen.Color := a;
Brush.Color:= b;
end;
end;
begin
with fmAirplain.Canvas do
begin
fmAirplain.WindowState := wsMaximized;
//Sky
prFillColor(clBlack,$00000011);
FillRect(Rect(0,0,1024,600 ));
//Stars
for counter:=1 to 1000 do
begin
stars[counter].X:=random(1024);
stars[counter].Y:=random(600);
pixels[stars[counter].X,stars[counter].Y]:=clwhite;
end;
//Moon
prFillColor($0086CAC8,$0086CAC8);
Ellipse(550,10,630,90);
//Ground
prFillColor(clBlack,$001D2D1D);
FillRect(Rect(0,600,1024,768));
//Airplain
prFillColor(clBlack,$00AA0000); //------------------------------------------I
Polygon([k[1],k[4],k[3]]);
Polygon([k[4],k[31],k[33],k[35]]);//----------------------------------------II
Polygon([k[2],k[38],k[31],k[4]]);//----------------------------------------III
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------IV
Polygon([k[31],k[13],k[29],k[32]]);
Polyline([k[28],k[27]]);//--------------------------------------------------VI
Arc(k[36].x,k[36].y,k[37].x,k[37].y,k[27].x,k[27].y,k[26].x,k[26].y);//----VII
Polyline([k[24],k[26],k[23],point(k[39].x-5,k[39].y)]); //----------------VIII //VIII
Arc(k[22].x,k[22].y,k[25].x,k[25].y,k[23].x,k[23].y,k[24].x,k[24].y);//-----W5
prFillColor(clBlack,clYellow); //-------------------------------------------Z1
FloodFill(142,180,clBlack,fsBorder);
prFillColor(clBlack,clYellow);//------------------------------------------------
Ellipse(k[7].x,k[7].y,k[8].x,k[8].y);//-------------------------------------W1
Ellipse(k[9].x,k[9].y,k[12].x,k[12].y);//-----------------------------------W2
//Ellipse(k[14].x,k[14].y,k[17].x,k[17].y);//-------------------------------W3
Ellipse(k[18].x,k[18].y,k[21].x,k[21].y);//---------------------------------W4
prFillcolor(clBlack,$00AA0000) ;//-------------------------------------------V
Polygon([k[5],k[6],k[39],k[30],k[34],k[13]]);
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------Z2
FloodFill(140,190,clBlack,fsBorder);
end;
end;
procedure TfmAirplain.btGoClick(Sender: TObject);
const
PlainLength = 161;
PlainHeight = 48;
XL : Integer = 8;
YL = 160;
XR : Integer = 166;
YR = 208;
var
counter:integer;
PlainImage : array [1..PlainLength,1..PlainHeight] of TColor;
procedure prFillcolor(a,b:LongWord); //Процедура установки цвета пера и цвета кисти
begin
with fmAirplain.Canvas do
begin
Pen.Color := a;
Brush.Color:= b;
end;
end;
procedure SavePlain;
var
x, y : Integer;
i, j : Integer;
begin
with fmAirplain.Canvas do
begin
Brush.Color := $00000011;
Rectangle(xl,yl,xr,yr);
//Airplain
prFillColor(clBlack,$00AA0000); //------------------------------------------I
Polygon([k[1],k[4],k[3]]);
Polygon([k[4],k[31],k[33],k[35]]);//----------------------------------------II
Polygon([k[2],k[38],k[31],k[4]]);//----------------------------------------III
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------IV
Polygon([k[31],k[13],k[29],k[32]]);
Polyline([k[28],k[27]]);//--------------------------------------------------VI
Arc(k[36].x,k[36].y,k[37].x,k[37].y,k[27].x,k[27].y,k[26].x,k[26].y);//----VII
Polyline([k[24],k[26],k[23],point(k[39].x-5,k[39].y)]); //----------------VIII //VIII
Arc(k[22].x,k[22].y,k[25].x,k[25].y,k[23].x,k[23].y,k[24].x,k[24].y);//-----W5
prFillColor(clBlack,clYellow); //-------------------------------------------Z1
FloodFill(142,180,clBlack,fsBorder);
prFillColor(clBlack,clYellow);//------------------------------------------------
Ellipse(k[7].x,k[7].y,k[8].x,k[8].y);//-------------------------------------W1
Ellipse(k[9].x,k[9].y,k[12].x,k[12].y);//-----------------------------------W2
//Ellipse(k[14].x,k[14].y,k[17].x,k[17].y);//-------------------------------W3
Ellipse(k[18].x,k[18].y,k[21].x,k[21].y);//---------------------------------W4
prFillcolor(clBlack,$00AA0000) ;//-------------------------------------------V
Polygon([k[5],k[6],k[39],k[30],k[34],k[13]]);
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------Z2
FloodFill(140,190,clBlack,fsBorder);
end;
x := XL;
for i:=1 to PlainLength do
begin
y := YL;
for j:=1 to PlainHeight do
begin
PlainImage[i,j] := fmAirplain.Canvas.Pixels[x,y];
y := y +1;
end;
x := x +1;
end;
end;
procedure DisplayPlain;
var
x, y : Integer;
i, j : Integer;
begin
x := XL;
for i:=1 to PlainLength do
begin
y := YL;
for j:=1 to PlainHeight do
begin
fmAirPlain.Canvas.Pixels[x,y] := PlainImage[i,j];
y := y + 1;
end;
x := x + 1;
end;
end;
begin
Draw(fmAirplain);
SavePlain;
repeat
XL := XL +3;
XR := XR +3;
//Stars
for counter:=1 to 1000 do
begin
fmAirplain.Canvas.Pixels[stars[counter].X,stars[counter].Y]:=clwhite;
end;
//Moon
prFillColor($0086CAC8,$0086CAC8);
fmAirplain.Canvas.Ellipse(550,10,630,90);
DisplayPlain;
until XR > 1250;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfmAirplain = class(TForm)
btGo: TButton;
procedure Draw(Sender: TObject);
procedure btGoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmAirplain: TfmAirplain;
stars:array[1..1000]of tpoint;
k:array[1..39] of TPoint=( (x:10;y:142), //1
(x:10;y:160), //2
(x:16;y:172), //3
(x:18;y:176), //4
(x:26;y:168), //5
(x:38;y:168), //6
(x:42;y:176), //7
(x:50;y:184), //8
(x:54;y:176), //9
(x:56;y:182), //10
(x:61;y:179), //11
(x:62;y:184), //12
(x:66;y:176), //13
(x:102;y:176), //14
(x:104;y:183), //15
(x:109;y:181), //16
(x:110;y:184), //17
(x:114;y:176), //18
(x:115;y:179), //19
(x:120;y:177), //20
(x:122;y:184), //21
(x:138;y:176), //22
(x:142;y:176), //23
(x:140;y:184), //24
(x:146;y:186), //25
(x:166;y:184), //26
(x:150;y:196), //27
(x:72;y:196), //28
(x:42;y:192), //29
(x:42;y:208), //30
(x:38;y:176), //31
(x:24;y:187), //32
(x:18;y:192), //33
(x:18;y:208), //34
(x:10;y:192), //35
(x:138;y:172), //a1-36
(x:166;y:196), //a2-37
(x:18;y:160), //3a-38
(x:122;y:176));//21a-39
implementation
{$R *.dfm}
{$J+}
{$WRITEABLECONST ON}
procedure TfmAirplain.Draw(Sender: TObject);
var
counter:integer;
procedure prFillcolor(a,b:LongWord); //Процедура установки цвета пера и цвета кисти
begin
with fmAirplain.Canvas do
begin
Pen.Color := a;
Brush.Color:= b;
end;
end;
begin
with fmAirplain.Canvas do
begin
fmAirplain.WindowState := wsMaximized;
//Sky
prFillColor(clBlack,$00000011);
FillRect(Rect(0,0,1024,600 ));
//Stars
for counter:=1 to 1000 do
begin
stars[counter].X:=random(1024);
stars[counter].Y:=random(600);
pixels[stars[counter].X,stars[counter].Y]:=clwhite;
end;
//Moon
prFillColor($0086CAC8,$0086CAC8);
Ellipse(550,10,630,90);
//Ground
prFillColor(clBlack,$001D2D1D);
FillRect(Rect(0,600,1024,768));
//Airplain
prFillColor(clBlack,$00AA0000); //------------------------------------------I
Polygon([k[1],k[4],k[3]]);
Polygon([k[4],k[31],k[33],k[35]]);//----------------------------------------II
Polygon([k[2],k[38],k[31],k[4]]);//----------------------------------------III
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------IV
Polygon([k[31],k[13],k[29],k[32]]);
Polyline([k[28],k[27]]);//--------------------------------------------------VI
Arc(k[36].x,k[36].y,k[37].x,k[37].y,k[27].x,k[27].y,k[26].x,k[26].y);//----VII
Polyline([k[24],k[26],k[23],point(k[39].x-5,k[39].y)]); //----------------VIII //VIII
Arc(k[22].x,k[22].y,k[25].x,k[25].y,k[23].x,k[23].y,k[24].x,k[24].y);//-----W5
prFillColor(clBlack,clYellow); //-------------------------------------------Z1
FloodFill(142,180,clBlack,fsBorder);
prFillColor(clBlack,clYellow);//------------------------------------------------
Ellipse(k[7].x,k[7].y,k[8].x,k[8].y);//-------------------------------------W1
Ellipse(k[9].x,k[9].y,k[12].x,k[12].y);//-----------------------------------W2
//Ellipse(k[14].x,k[14].y,k[17].x,k[17].y);//-------------------------------W3
Ellipse(k[18].x,k[18].y,k[21].x,k[21].y);//---------------------------------W4
prFillcolor(clBlack,$00AA0000) ;//-------------------------------------------V
Polygon([k[5],k[6],k[39],k[30],k[34],k[13]]);
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------Z2
FloodFill(140,190,clBlack,fsBorder);
end;
end;
procedure TfmAirplain.btGoClick(Sender: TObject);
const
PlainLength = 161;
PlainHeight = 48;
XL : Integer = 8;
YL = 160;
XR : Integer = 166;
YR = 208;
var
counter:integer;
PlainImage : array [1..PlainLength,1..PlainHeight] of TColor;
procedure prFillcolor(a,b:LongWord); //Процедура установки цвета пера и цвета кисти
begin
with fmAirplain.Canvas do
begin
Pen.Color := a;
Brush.Color:= b;
end;
end;
procedure SavePlain;
var
x, y : Integer;
i, j : Integer;
begin
with fmAirplain.Canvas do
begin
Brush.Color := $00000011;
Rectangle(xl,yl,xr,yr);
//Airplain
prFillColor(clBlack,$00AA0000); //------------------------------------------I
Polygon([k[1],k[4],k[3]]);
Polygon([k[4],k[31],k[33],k[35]]);//----------------------------------------II
Polygon([k[2],k[38],k[31],k[4]]);//----------------------------------------III
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------IV
Polygon([k[31],k[13],k[29],k[32]]);
Polyline([k[28],k[27]]);//--------------------------------------------------VI
Arc(k[36].x,k[36].y,k[37].x,k[37].y,k[27].x,k[27].y,k[26].x,k[26].y);//----VII
Polyline([k[24],k[26],k[23],point(k[39].x-5,k[39].y)]); //----------------VIII //VIII
Arc(k[22].x,k[22].y,k[25].x,k[25].y,k[23].x,k[23].y,k[24].x,k[24].y);//-----W5
prFillColor(clBlack,clYellow); //-------------------------------------------Z1
FloodFill(142,180,clBlack,fsBorder);
prFillColor(clBlack,clYellow);//------------------------------------------------
Ellipse(k[7].x,k[7].y,k[8].x,k[8].y);//-------------------------------------W1
Ellipse(k[9].x,k[9].y,k[12].x,k[12].y);//-----------------------------------W2
//Ellipse(k[14].x,k[14].y,k[17].x,k[17].y);//-------------------------------W3
Ellipse(k[18].x,k[18].y,k[21].x,k[21].y);//---------------------------------W4
prFillcolor(clBlack,$00AA0000) ;//-------------------------------------------V
Polygon([k[5],k[6],k[39],k[30],k[34],k[13]]);
prFillColor(clBlack,$00FF0000) ; //-----------------------------------------Z2
FloodFill(140,190,clBlack,fsBorder);
end;
x := XL;
for i:=1 to PlainLength do
begin
y := YL;
for j:=1 to PlainHeight do
begin
PlainImage[i,j] := fmAirplain.Canvas.Pixels[x,y];
y := y +1;
end;
x := x +1;
end;
end;
procedure DisplayPlain;
var
x, y : Integer;
i, j : Integer;
begin
x := XL;
for i:=1 to PlainLength do
begin
y := YL;
for j:=1 to PlainHeight do
begin
fmAirPlain.Canvas.Pixels[x,y] := PlainImage[i,j];
y := y + 1;
end;
x := x + 1;
end;
end;
begin
Draw(fmAirplain);
SavePlain;
repeat
XL := XL +3;
XR := XR +3;
//Stars
for counter:=1 to 1000 do
begin
fmAirplain.Canvas.Pixels[stars[counter].X,stars[counter].Y]:=clwhite;
end;
//Moon
prFillColor($0086CAC8,$0086CAC8);
fmAirplain.Canvas.Ellipse(550,10,630,90);
DisplayPlain;
until XR > 1250;
end;
end.
Соседние файлы в папке laba4var19(Canvas)