Кодинг
★ Рубрика: Кодинг
★ Тема: Pascal

Имитация сложного движения в Паскале

Имитация более сложного движения предполагает перемещение не только самого объекта, но и его частей (рук, ног, глаз и т.д.). Такое движение можно изобразить с помощью нескольких рисунков. Каждый из этих рисунков соответствует определенному положению движущейся части. Для имитации движения необходимо организовать цикл, в котором осуществляется поочередный вывод и стирание указанных рисунков с соответствующим изменением координат выводимых областей. При этом получится маленький мультфильм.
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.
 Похожие публикации: Pascal

Войдите, чтобы добавить Ваш ответ. [ Регистрация | Вход ]