Язык программирования:
Pascal
Среда программирования:
Lazarus IDE v.1.8.4
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; Timer1: TTimer; Timer2: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private ARect : TRect; BitMap : TBitMap; public procedure Eyes(); procedure Fly(ind, kx, ky: integer); end; var Form1: TForm1; fd: array [1..10] of byte; er: TRect; fr: array [1..10] of TRect; ebm: TBitMap; fbm: array [1..10] of TBitMap; fs, i, k, j, f, x11, x21, y11, y21, e, x12, x22, y12, y22, x13, x23, y13, y23:integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.Eyes(); begin arect:=rect(0,0,er.Width,er.Height); paintbox1.Canvas.CopyRect(er,ebm.Canvas,arect); //восстановление зоны глаз with PaintBox1.Canvas do begin Brush.Color:=RGBToColor(32,29,37); Pen.Color:=RGBToColor(32,29,37); Ellipse(310+e, 190, 320+e, 220); //левый зрачок Ellipse(370+e, 190, 380+e, 220); //правый зрачок end; end; procedure TForm1.Fly(ind, kx, ky: integer); begin arect:=rect(0,0,fs,fs); paintbox1.Canvas.CopyRect(fr[ind],fbm[ind].Canvas,arect); //восстановление зоны под светлячком fr[ind].Left:=fr[ind].Left+kx; fr[ind].Top:=fr[ind].Top+ky; fr[ind].Width:=fs; fr[ind].Height:=fs; fbm[ind].Canvas.CopyRect(arect,bitmap.Canvas,fr[ind]); //сохранение зоны нового положения светлячка with paintbox1.Canvas do begin Brush.Color:=RGBToColor(250,190,40); Pen.Color:=RGBToColor(250,190,40); Ellipse(fr[ind]); end; end; procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Canvas.Brush.Color:=RGBToColor(46,61,108); //фон PaintBox1.Canvas.FillRect(PaintBox1.Canvas.ClipRect); with Paintbox1.Canvas do begin Brush.Color:=RGBToColor(50,49,63); //полка Pen.Color:=RGBToColor(50,49,63); Rectangle(10,400,535,450); Brush.Color:=RGBToColor(33,47,89); //тень Pen.Color:=RGBToColor(33,47,89); Polygon([Point(10,450),Point(534,450),Point(534,500)]); Brush.Color:=RGBToColor(32,29,37); Pen.Color:=RGBToColor(32,29,37); RoundRect(174,220,424,400,180,180); //тело низ RoundRect(240,124,430,400,180,180); //тело верх RoundRect(22,340,308,400,60,60); //хвост Polygon([Point(274,160),Point(274,110),Point(320,130)]); //левое ухо Polygon([Point(350,140),Point(414,112),Point(414,176)]); //правое ухо Brush.Color:=RGBToColor(16,198,50); Pen.Color:=RGBToColor(16,198,50); Ellipse(300, 190, 330, 220); //глаза Ellipse(360, 190, 390, 220); Brush.Color:=RGBToColor(140,198,16); Pen.Color:=RGBToColor(140,198,16); Ellipse(303, 193, 327, 217); Ellipse(363, 193, 387, 217); Brush.Color:=RGBToColor(170,198,16); Pen.Color:=RGBToColor(170,198,16); Ellipse(306, 196, 324, 214); Ellipse(366, 196, 384, 214); end; fs:=10; fr[1].Left:=30;fr[1].Top:=40; //размещение светлячков fr[2].Left:=460;fr[2].Top:=400; fr[3].Left:=140;fr[3].Top:=360; fr[4].Left:=250;fr[4].Top:=170; fr[5].Left:=370;fr[5].Top:=260; fd[1]:=0;fd[2]:=1;fd[3]:=0;fd[4]:=1;fd[5]:=0; //направление светлячков - 0 для движения слева направо сверху вниз, 1 - наоборот fr[6].Left:=random(545);fr[6].Top:=random(545); fr[7].Left:=random(545);fr[7].Top:=random(545); fr[8].Left:=random(545);fr[8].Top:=random(545); fr[9].Left:=random(545);fr[9].Top:=random(545); fr[10].Left:=random(545);fr[10].Top:=random(545); fd[6]:=0;fd[7]:=1;fd[8]:=0;fd[9]:=1;fd[10]:=0; BitMap:=TBitmap.Create; BitMap.Width:=PaintBox1.Width; BitMap.Height:=PaintBox1.Height; ARect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height); BitMap.Canvas.CopyRect(ARect,PaintBox1.Canvas, ARect); //сохранение всего фона er:=Rect(300,190,390,220); ebm:=TBitMap.Create; ebm.Width:=er.Width; ebm.Height:=er.Height; arect:=rect(0,0,er.Width,er.Height); ebm.Canvas.CopyRect(arect,bitmap.Canvas,er); //сохранение исходной зоны под глаза for i:=1 to 10 do begin fbm[i]:=TBitMap.Create; fbm[i].Width:=fs; fbm[i].Height:=fs; fr[i].Width:=fs; fr[i].Height:=fs; arect:=rect(0,0,fs,fs); fbm[i].Canvas.CopyRect(arect,bitmap.Canvas,fr[i]); //сохранение исходной зоны под светлячка end; e:=0; Eyes(); Timer1.Interval:=500; //таймер для смещения глаз Timer1.Enabled:=true; Timer2.Interval:=10; //таймер для движения светлячков Timer2.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin e:=random(10)-random(9); end; procedure TForm1.Timer2Timer(Sender: TObject); begin Eyes(); for i:=1 to 10 do begin Fly(i,random(5-fd[i])-random(5-(1-fd[i])),random(5-fd[i])-random(5-(1-fd[i]))); if (fr[i].Left>paintbox1.Width) and (fd[i]=0) then begin //вылет через правый край fr[i].Left:=-15; fr[i].Width:=fs; end; if (fr[i].Top>paintbox1.Height) and (fd[i]=0) then begin //вылет через нижний край fr[i].Top:=-5; fr[i].Height:=fs; end; if (fr[i].Right<0) and (fd[i]=1) then begin //вылет через левый край fr[i].Left:=550; fr[i].Width:=fs; end; if (fr[i].Bottom<0) and (fd[i]=1) then begin //вылет через верхний край fr[i].Top:=550; fr[i].Height:=fs; end; end; end; end.
Прикрепленный файл | Размер |
---|---|
Cat.zip | 3.46 кб |