Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
16.04.2013
Размер:
8.06 Кб
Скачать
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.

Соседние файлы в папке laba4var19(Canvas)
  • #
    16.04.20138.77 Кб26Airplain.dcu
  • #
    16.04.201351 б27Airplain.ddp
  • #
    16.04.2013543 б27Airplain.dfm
  • #
    16.04.20138.06 Кб28Airplain.pas
  • #
    16.04.201351 б27Airplain.~ddp
  • #
    16.04.2013543 б26Airplain.~dfm
  • #
    16.04.20138.07 Кб26Airplain.~pas
  • #
    16.04.201330 б30zadanie.txt
  • #
    16.04.2013426 б26_Airplain.cfg