Имитация более сложного движения предполагает перемещение не только самого объекта, но и его частей (рук, ног, глаз и т.д.). Такое движение можно изобразить с помощью нескольких рисунков. Каждый из этих рисунков соответствует определенному положению движущейся части. Для имитации движения необходимо организовать цикл, в котором осуществляется поочередный вывод и стирание указанных рисунков с соответствующим изменением координат выводимых областей. При этом получится маленький мультфильм.
Program kolobok;
Uses
Crt,Graph;
Var
Gd,Gm,Er:integer;
step:integer;
X,Y:integer;
Size1,Size2:Word;
p1,p2:Pointer;
Procedure kolob;
{ Рисует колобок в виде закрашенного круга }
Begin
SetColor(White);
Circle(70,269,50);
SetFillStyle(1,Yellow);
FloodFill(70,259,White);
FloodFill(80,249,White);
End; { Kolob}
Procedure noga1; { Рисует одну ногу }
Begin
SetLineStyle(0,0,3); { Жирная сплошная }
SetColor(Yellow); { Рисовать желтым }
Line(70,289,70,329);
Line(70,329,90,329);
Arc(80,329,0,180,10);
SetFillStyle(1,Yellow); {Сплошное заполнение желтым}
FloodFill(80,326,Yellow);
End; { Noga1 }
Procedure noga2; { Рисует две ноги }
Begin
SetLineStyle(0,0,3);
SetColor(Yellow);
SetFillStyle(1,Yellow);
Line(90,294,100,324);
Line(98,324,117,324);
Arc(108,324,15,190,9);
FloodFill(108,321,Yellow);
Line(50,294,40,324);
Line(40,324,56,324);
Arc(49,324,350,160,9);
FloodFill(49,321,Yellow);
End; { noga2 }
Procedure kolob1;
{ Рисует и запоминает одну фазу движения - }
{ колобок с одной ногой }
begin
kolob;
noga1;
size1:=ImageSize(15,219,128,331);
GetMem(p1,size1);
GetImage(15,219,128,331,p1^);
ClearDevice;
end; { kolob1 }
Procedure kolob2;
{ Рисует и запоминает другую фазу движения - }
{ колобок с двумя ногами }
begin
kolob;
noga2;
size2:=ImageSize(15,219,128,331);
GetMem(p2,size2);
GetImage(15,219,128,331,p2^);
ClearDevice;
end; { kolob2 }
Begin
Gd:=Vga;
Gm:=VgaMed;
InitGraph(Gd,Gm,'D:\Bp\Bgi');
Er:=GraphResult;
If Er=GrOK then
Begin
SetBkColor(blue);
kolob1;
kolob2;
{ Начальные координаты и шаг перемещения}
x := 55;
y := 100;
step := 10;
Repeat
PutImage(X,Y,p1^,NormalPut);
Delay(150);
PutImage(X,Y,p1^,XORPut);
X:=X+step;
PutImage(X,Y,p2^,NormalPut);
Delay(150);
PutImage(X,Y,p2^,XorPut);
X:=X+step;
Until X>469;
CloseGraph;
End
else
Writeln('Ошибка графики: ',Er,'. ',GraphErrorMsg(Er));
WriteLn('Нажмите Enter...');
Readln;
End.