Sponge Bob

booob.jpg

Задача : создать приложение, выводящее на экран анимированное изображение
Язык : Delphi

Картинка рисуется при помощи графических примитивов: линия, эллипс, многоугольник, дуга, часть эллипса(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.

Ключевые слова: 
анимация
ВложениеРазмер
Sponge Bob.rar167.17 кб