Задача : создать приложение, выводящее на экран анимированное изображение Картинка рисуется при помощи графических примитивов: линия, эллипс, многоугольник, дуга, часть эллипса(pie), прямоугольник. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } Bmp: TBitMap; public { Public declarations } end; var Form1: TForm1; x, maxX, maxY, y, i, x1, y1,y2, x2: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with PaintBox1.Canvas do begin //левая рука MoveTo(67,257); LineTo(47,315); MoveTo(47,315); LineTo(30,323); MoveTo(47,315); LineTo(35,330); MoveTo(47,315); LineTo(43,333); MoveTo(47,315); LineTo(56,324); //правая рука MoveTo(295,203); LineTo(363,180); MoveTo(363,180); LineTo(368,168); MoveTo(363,180); LineTo(379,172); MoveTo(363,180); LineTo(382,183); MoveTo(363,180); LineTo(377,192); //тело Brush.Color:=RGB(255,215,0); Polygon([Point(300,185),Point(260,205),Point(260,222),Point(310,215)]); //правый рукав Rectangle(110,60,270,240); Brush.Color:=RGB(238,201,0); Polygon([Point(110,60),Point(70,80),Point(70,259),Point(110,239)]); //правый глаз MoveTo(210,100); LineTo(210,80); MoveTo(225,105); LineTo(240,85); Brush.Color:=clWhite; Ellipse(180,100,240,160); Brush.Color:=RGB(30,144,255); Ellipse(195,115,225,145); Brush.Color:=clBlack; Ellipse(203,123,217,137); //левый глаз MoveTo(170,100); LineTo(170,80); MoveTo(185,105); LineTo(200,85); MoveTo(155,105); LineTo(140,85); Brush.Color:=clWhite; Ellipse(140,100,200,160); Brush.Color:=RGB(30,144,255); Ellipse(155,115,185,145); Brush.Color:=clBlack; Ellipse(163,123,177,137); //нос Brush.Color:=clYellow; Ellipse(183,155,225,170); //рот Arc(120,80,280,180,120,178,250,200); Arc(137,40,300,225,120,175,225,240); Brush.Color:=clWhite; Polygon([Point(178,177),Point(178,195),Point(198,195),Point(198,179)]); Polygon([Point(205,179),Point(205,195),Point(225,195),Point(225,176)]); Brush.Color:=RGB(255,100,128); Pie(170,205,218,235,240,230,145,195); Polygon([Point(223,224),Point(214,195)]); //галстук Brush.Color:=RGB(193,225,193); Rectangle(110,239,270,280); Brush.Color:=RGB(160,210,155); Polygon([Point(110,239),Point(70,259),Point(70,299),Point(110,279)]); //штаны Brush.Color:=RGB(160,82,45); Rectangle(110,279,270,320); Brush.Color:=RGB(147,60,15); Polygon([Point(110,279),Point(70,299),Point(70,339),Point(110,319)]); Brush.Color:=RGB(144,50,10); Polygon([Point(269,319),Point(230,339),Point(70,339),Point(110,319)]); Brush.Color:=RGB(147,60,15); Rectangle(115,330,155,360); Rectangle(187,330,227,360); //левый рукав Brush.Color:=RGB(255,215,0); Polygon([Point(90,220),Point(75,215),Point(53,255),Point(82,264)]); //рубашка Brush.Color:=clWhite; Polygon([Point(180,239),Point(160,260),Point(140,239)]); Polygon([Point(200,239),Point(220,260),Point(240,239)]); Brush.Color:=RGB(210,0,0); //галстук Polygon([Point(200,239),Point(190,250),Point(180,239)]); Polygon([Point(190,250),Point(180,300),Point(190,310),Point(200,300)]); //ноги Brush.Color:=RGB(54,54,54); MoveTo(135,359); LineTo(135,423); Ellipse(100,420,155,440); MoveTo(207,359); LineTo(207,423); Ellipse(187,420,242,440); x:=0; maxX:=PaintBox1.Width; maxY:=PaintBox1.Height; y:=0; //рамка Brush.Color:=clGreen; while(x<maxX) do begin PaintBox1.Canvas.Ellipse(x, 0, 20 + x, 20); x:= x+20; end; x:=0; while(x<maxX) do begin PaintBox1.Canvas.Ellipse(x, maxY - 20, 20+x, maxY); x:= x+20; end; while(y<maxY) do begin PaintBox1.Canvas.Ellipse(0, y, 20, y + 20); y:= y+20; end; y:=0; while(y<maxY) do begin PaintBox1.Canvas.Ellipse(maxX - 20, y, maxX, y+20); y:= y+20; end; Timer1.Enabled:=true; Bmp:=TBitMap.Create; Bmp.Width:=PaintBox1.Width; Bmp.Height:=PaintBox1.Height; Bmp.Canvas.CopyRect(Rect(100,0,400,220),PaintBox1.Canvas,Rect(100,0,400,220)); //пузырьки Brush.Color:=RGB(178,223,238); x:=240; y:=180; PaintBox1.Canvas.Ellipse(x,y,x+27,y+30); x1:=250; y1:=120; PaintBox1.Canvas.Ellipse(x1,y1,x1+25,y1+28); x2:=255; y2:=90; PaintBox1.Canvas.Ellipse(x2,y2,x2+20,y2+23); end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin PaintBox1.Canvas.CopyRect(Rect(100,0,400,220),Bmp.Canvas,Rect(100,0,400,220)); //рисование пузырьков PaintBox1.Canvas.Ellipse(x,y,x+27,y+30); PaintBox1.Canvas.Ellipse(x1,y1,x1+25,y1+28); PaintBox1.Canvas.Ellipse(x2,y2,x2+20,y2+23); //движение правого пузырька x:=x+3; y:=y-10; if y < 20 then begin y:= 180; x:= 240; end; //движение левого пузырька x1:=x1-3; y1:=y1-10; if y1 < 20 then begin y1:= 190; x1:= 240; end; //движение среднего пузырька y2:=y2-10; if y2 < 20 then begin y2:=180; x2:= 240; end; end; end.
Ключевые слова:
анимация
|
|||||||