unit mKugel;

interface

uses mSuM;

type Kugel = class
       hatStift: Stift;         // die Kugel hat einen Stift, um sich zu zeichnen

       zRadius,
       zMinH, zMaxH : GanzeZahl;
       zGeschwindigkeit: Zahl;

       constructor init(pAnfangH, pAnfangV: GanzeZahl; pGeschwindigkeit: Zahl);
       procedure   Zeichne;
       procedure   Loesche;
       procedure   Bewege;
       function    hPosition: Zahl;              // Anfrage mit Ergebnistyp Zahl
       procedure   setzeRichtung(pWinkel: Zahl); // Auftrag mit Parameter
       destructor  gibFrei;
     end;

implementation

constructor Kugel.init(pAnfangH, pAnfangV: GanzeZahl; pGeschwindigkeit: Zahl);
begin
  hatStift := Stift.init;       // Stift erzeugen
  hatStift.bewegeBis(pAnfangH, pAnfangV);
  zRadius:=5;
  zMinH :=10;
  zMaxH:=460;
  zGeschwindigkeit:=pGeschwindigkeit
end;

procedure   Kugel.Zeichne;
begin
  hatStift.zeichneKreis(zRadius);
end;

procedure   Kugel.loesche;
begin
  hatStift.radiere;
  self.Zeichne;
  hatStift.normal
end;

procedure   Kugel.Bewege;
begin
  self.loesche;
  hatStift.bewegeUm(zGeschwindigkeit);       
  if self.hPosition >= (zMaxH-zRadius-1) then // am rechten Rand angekommen (Radius der Kugel berücksichtigen!)
          self.setzeRichtung(180);  // nach links
  if self.hPosition <= (zMinH+zRadius+1) then // am linken Rand angekommen  (Radius der Kugel berücksichtigen!)
          self.setzeRichtung(0);    // nach rechts
   self.Zeichne;
end;

function    Kugel.hPosition: Zahl;
begin
  result:=hatStift.hPosition
end;

procedure   Kugel.setzeRichtung(pWinkel: Zahl);
begin
  hatStift.dreheBis(pWinkel)
end;

destructor  Kugel.gibFrei;
begin
  hatStift.gibFrei;             // Stift wieder freigeben
end;

end.