[PASCAL] Wygaszacz ekranu z linii


(Alzajac1) #1

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.