[TPascal] Czyszczenie ostatniej instrukcji

0

Piszę program w uses graph w TPascalu.
Niemal pół ekranu to procedura rower rysująca i kolorująca floodfillem..
Uzależniona procedura jest od parametrów x,y i a (punkty na ekranie i wielkość elementów).
Zrobiłem drugą procedurę dotyczącą korb które się kręcą w czasie jazdy roweru.
Procedura rysująca w pętli także rysuje położenia: linia pionowa, pozioma i dwie na ukos.
(różne położenia korby roweru podczas pedałowania)
Problem jest że po każdej narysowanej linii dałem czyszczenie ekranu i wcześniej delay.
Gdyby pod rząd po narysowaniu roweru program narysował 4 położenia korby to się zrobi krzyżyk.
Czyszczenie cleardevice pomiędzy położeniami korby kasuje rower a rysowanie roweru przy każdym położeniu korby jest mało sensowne gdyż mryga całość i kolory się nie uzupełniają (floodfill).
Da się jakoś zrobić by jeden element (procedura) była narysowana a druga istniała, czyściła się i się zmieniała nie ruszając pierwszej. Mam teraz w szkole środowisko graficzne w Pascalu i chciałem trochę więcej zrobić niż rysowanie kwadratów i kół na lekcji. Domyślam się że nikt w Pascalu nie robi takich grafik. Chciałem jedynie podszkolić graph w TP na czymś większym.
Mam nadzieję że ktoś zrozumiał mój chaotyczny post i pomoże.

uses crt,graph;
 var a,b:integer;
     licz:byte;


procedure rower(x,y,a:integer); forward;

 procedure korba(x,y,a:integer); 
  begin                          

   repeat
    setlinestyle(0,2,3);
    line(x+round(51*a/21),y+round(10*a/21),x+round(30*a/21),y+round(-10*a/21));delay(100);clearviewport;
    setlinestyle(0,2,1);
      rower(200,500,200);
    setlinestyle(0,2,3);
    line(x+round(30*a/21),y+round(10*a/21),x+round(51*a/21),y+round(-10*a/21));delay(100);clearviewport;
    setlinestyle(0,2,1);
      rower(200,500,200);

   until keypressed;

   {korby}
  end;

 procedure rower(x,y,a : integer);
  var licz:byte;

  begin
   setbkcolor(green);
   cleardevice;
   circle(x,y,round(a/15)); {piasta przod}
   arc(x,y,77,360,a);arc(x,y,0,69,a);{opona przod}
   arc(x,y,77,360,round(4*a/5));arc(x,y,0,69,round(4*a/5));{felga przod}
   circle(x+round(10*a/3),y,round(a/15)); {piasta tyl}
   arc(x+round(10*a/3),y,0,125,a);
   arc(x+round(10*a/3),y,130,176,a);
   arc(x+round(10*a/3),y,184,360,a);{opona tyl}
   arc(x+round(10*a/3),y,0,125,round(4*a/5));
   arc(x+round(10*a/3),y,131,175,round(4*a/5));
   arc(x+round(10*a/3),y,185,360,round(4*a/5));
   rectangle(x+round(41*a/21),y-round(a/15),x+round(10*a/3),y+round(a/15));
   {kaseta - piasta}
   circle(x+round(10*a/3),y,round(a/15)); {piasta tyl}
   circle(x+round(41*a/21),y,round(a/4)); {kaseta przod}
   line(x+round(49*a/15),y,x+round(47*a/21),y-round(135*a/100));
   line(x+round(50*a/15),y-round(a/15),x+round(47*a/21),y-round(3*a/2));
   {piasta-siedzenie}

   line(x+round(a/15),y,x+round(a/2),y-round(7*a/5));
   line(x-round(a/15),y,x+round(55*a/150),y-round(7*a/5));
   line(x+round(55*a/150),y-round(7*a/5),x+round(55*a/150),y-round(39*a/25));
   setlinestyle(0,2,3);
   for
   licz:=17 to 22 do
    begin arc(x,y,69,77,round(licz*a/20));end;
   setlinestyle(0,2,1);
   {widelec przod}
   line(x+round(a/2),y-round(7*a/5),x+round(a/2),y-round(8*a/5));
   line(x+round(a/2),y-round(8*a/5),x-round(a/5),y-round(9*a/5));
   line(x-round(a/5),y-round(9*a/5),x-round(a/5),y-round(85*a/50));
   line(x-round(a/5),y-round(85*a/50),x+round(3*a/6),y-round(76*a/50));

   {kierownica}
   {line(x+round(a/2),y-round(7*a/5),x+round(63*a/28),y-round(7*a/5)); srodek masy}
   rectangle(x+round(a/2),y-round(218*a/150),x+round(63*a/28),y-round(202*a/150));
   {rama gora}
   line(x+round(41*a/21),y-round(a/10),x+round(a/2),y-round(14*a/10));
   line(x+round(41*a/21),y+round(a/15),x+round(a/2),y-round(12*a/10));
   line(x+round(a/2),y-round(12*a/10),x+round(44*a/100),y-round(12*a/10));
   {rama koszyk}
   {line(x+round(41*a/21),y,x+round(63*a/28),y-round(7*a/5)); srodek ciezkosci}
   line(x+round(1176*a/588),y,x+round(1351*a/588),y-round(7*a/5));
   line(x+round(1120*a/588),y,x+round(1295*a/588),y-round(7*a/5));

   {rama pion}
   line(x+round(31*a/14),y-round(7*a/5),x+round(129*a/56),y-round(9*a/5));
   line(x+round(32*a/14),y-round(7*a/5),x+round(133*a/56),y-round(9*a/5));
   rectangle(x+round(115*a/56),y-round(45*a/25),x+round(150*a/56),y-round(46*a/25));
   {sztyca plus siodlo}
   line(x+round(36*a/50),y-a,x+round(38*a/50),y-round(58*a/50));
   line(x+round(a/2),y-round(218*a/150),x+round(11*a/14),y-round(202*a/150));
   {malowanko elementy}
   end;
procedure malowanie (x,y,a:integer);

begin
 {setfillstyle(1,darkgray); {---------szare opony-------------}
 { floodfill(x+a-2,y,white);
  floodfill(x+round(5*a/2),y-round(a/10),white);
  floodfill(x+round(5*a/2),y+round(a/10),white);}{----------}
 setfillstyle(1,16); {-------------rama i inne elementy----}
{  floodfill(x+a,y-round(23*a/16),white); }
{         circle(x,y-round(1*a/16),10);  }
  floodfill(x+round(8*a/10),y-round(17*a/16),white);
{ floodfill(x+round(11*a/5),y-a,white);    }
  floodfill(x+round(49*a/15),y-round(1*a/10),white);
  floodfill(x+round(6*a/10),y-round(23*a/16),white);
  floodfill(x,y-round(a/8),white);
  floodfill(x+round(19*a/6),y,white);
end;



begin  licz:=0;
initgraph(a,b,'');


cleardevice;
{rower (random(200)+200,random(200)+200,random(100)+10);delay(1000);}
rower(200,500,200);
korba(200,500,200);

malowanie(200,500,200);
readln;
closegraph;
end.
0

Pierwsza procedura czeka na powrót pionowy plamki. Druga jako sampl kiedy wywołać.

PROCEDURE PowrotPionowy; ASSEMBLER;
ASM
   MOV   DX, 3DAh
 @@1:                     { jest powrot    }
   IN    AL, DX
   TEST  AL, 00001000b
   JNZ   @@1
 @@2:                     { nie ma powrotu }
   IN    AL, DX
   TEST  AL, 00001000b
   JZ    @@2
END; { PowrotPionowy }

PROCEDURE PiszWartosci(x :Integer);
VAR s1, s2 :STRING[80];
BEGIN
 Str(x/ZakresX*360:8:4, s1);
 Str(Wartosci[x]:8:4, s2);
 s1 := 'x= '+s1+'  y= '+s2;
 SetColor(YELLOW);
 SetViewPort(0,Ym-9, TextWidth(s1), Ym, ClipOff);
 PowrotPionowy;
 ClearViewPort;
 OutTextXY(0,9, s1);
 SetViewPort(0,0, Xm, Ym, ClipOff);
END;
0

ZakresX i wartosci[x] mam zadleklarować jako jakie zmienne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1