Witam,
Na ostatnich zajęciach z programowania zaczęliśmy robić program który miał wyświetlać linie które będą odbijać się od krawędzi ekranu. Każda następna linia miała wychodzić z końca poprzedniej a poprzednia miała być wymazana. Programu nie skończyliśmy ale moja ciekawość kazała mi spróbować się z zmierzyć z tym zadaniem i napisałem coś takiego. Program działa z tym że kolejne linie nie wychodzą z końca poprzedniej lecz z jej początku co oznacza że każda kolejna linia wychodzi z tego samego punktu. Gdzie robię błąd? Kombinuję już na wszystkie sposoby ale nie mam pojęcia czemu nie działa tak jakbym chciał.
program wygaszacz;
uses crt,Graph;
const
SterownikGr:integer=VGA;
TrybGr:integer=VGAHI;
getMaxX=640; {max szerokosc ekranu}
getMaxY=480; {max wysokosc ekranu}
var
xA,yA,xB,yB:integer; {wspolrzedne punkt˘w A,B,C}
PAMxA,PAMyA,PAMxB,PAMyB:integer; {zapamiatane wspolrzedne pierwszej lini}
VxB,VyB:integer; {wektor ruchu punktu}
BladGr:integer;
procedure przelicz(var xB,yB,VxB,VyB:integer); {przelicza pozycje punktow}
begin
if (xB+VxB>getMaxX) or (xB+VxB<0) then
VxB:= -(VxB);
if (yB+VyB>getMaxY) or (yB+VyB<0) then
VyB:= -(VyB);
end;
procedure pamietaj(xA,yA,xB,yB:integer); {zapamietuje punkty poczatkowe
i koncowe pierwszej lini}
begin
PAMxA:=xA;
PAMyA:=yA;
PAMxB:=xB;
PAMyB:=yB;
end;
begin
Randomize;
xA:=Random(getMaxX);
yA:=Random(getMaxY);
xB:=Random(getMaxX);
yB:=Random(getMaxY);
InitGraph(SterownikGr,TrybGr,'C:/Progra~1\TP\BGI'); {inicjacja trybu graficznego}
BladGr:=GraphResult;
if BladGr=grOK then
repeat
begin
setcolor(10);
line(xA,yA,xB,yB); {rysowanie pierwszej lini}
delay(1000); {odczekanie: 1000 to 1 sekunda}
pamietaj(xA,yA,xB,yB);
xA:=xB;
yA:=yB;
VxB:=Random(getMaxX);
VyB:=Random(getMaxY);
przelicz(xB,yB,VxB,VyB);
line(xA,yA,xB+VxB,yB+VyB);
xA:=xB+VxB;
yA:=yB+VyB;
delay(1000); {odczekanie}
setcolor(0);
line(PAMxA,PAMyA,PAMxB,PAMyB); {scieranie pierwszej lini}
end;
until keypressed
else
begin
writeln('Blad grafiki:',GraphErrorMsg(BladGr));
readkey;
end;
closegraph;
end.