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.