Написать программу, результатом работы которой будет движущееся по экрану монитора цветное изображение настольной лампы.
У меня ооочень глупый вопрос: не представляю, каким способом нарисовать, чтоб было более менее похоже на лампу!
procedure lamp(const x,y: integer);
begin
setcolor(5);
ellipse(x+200,y+200,0,360,20,10);
setfillstyle(1,5);
floodfill(x+200,y+200,5);
setcolor(13);
ellipse(x+200,y+185,0,360,10,5);
setfillstyle(1,13);
floodfill(x+200,y+185,13);
ellipse(x+180,y+240,0,360,30,15);
floodfill(x+180,y+240,13);
setcolor(15);
ellipse(x+185,y+180,0,180,15,10);
moveto(x+170,y+180);
lineto(x+170,y+240);
ellipse(x+185,y+245,0,360,5,2);
setfillstyle(1,15);
floodfill(x+185,y+245,15);
readkey;
end;
Uses Graph, Crt;
procedure lamp( x,y: integer);
begin
setcolor(5);
ellipse(x+200,y+200,0,360,20,10);
setfillstyle(1,5);
floodfill(x+200,y+200,5);
setcolor(13);
ellipse(x+200,y+185,0,360,10,5);
setfillstyle(1,13);
floodfill(x+200,y+185,13);
ellipse(x+180,y+240,0,360,30,15);
floodfill(x+180,y+240,13);
setcolor(15);
ellipse(x+185,y+180,0,180,15,10);
moveto(x+170,y+180);
lineto(x+170,y+240);
ellipse(x+185,y+245,0,360,5,2);
setfillstyle(1,15);
floodfill(x+185,y+245,15);
readkey;
end;
var
DriverVar, ModeVar, ErrCode, x, y: integer;
dx, dt : integer;
begin
clrscr;
DriverVar := Detect; ModeVar := VGAHi;
InitGraph (DriverVar, ModeVar,'');
ErrCode := GraphResult;
if ErrCode = grOk then begin
dx := 15;
dt := 70;
while x < 600 do begin
lamp (x,y);
Delay(dt);
SetColor(0);
lamp(x,y);
x := x+dx;
end;
end else
closegraph;
end.
begin
DriverVar := Detect; ModeVar := VGAHi;
InitGraph (DriverVar, ModeVar,'');
ErrCode := GraphResult;
if ErrCode = grOk then begin
dx := 15; dt := 70;
while x < 600 do begin
lamp (x,y);
Delay(dt);
cleardevice;
x := x+dx;
end;
readln;
closegraph;
end
end.
Только учти, что перерисовывается лампа дольше, чем выводится через PutImage... Запусти программу, узнаешь, к чему это я... Только ReadKey из процедуры отрисовки лампы убери...