unit mKreis;

interface

uses mSuM;

type Kreis = class
      // Objektnamen
       hatStift: Buntstift;

      // Zustandsvariablen für die Attribute
       zGroesse: Zahl;

       constructor init(pHPosition, pVPosition, pGroesse: Zahl);
       procedure   zeichne;
       procedure   loesche;
       procedure   setzeFarbe(pFarbe: GanzeZahl);
       procedure   bewegeBis(pHPosition, pVPosition: Zahl);
       procedure   bewegeUm(pHDistanz, pVDistanz: Zahl);
       function    hPosition: Zahl;
       function    vPosition: Zahl;
       procedure   setzeGroesse(pGroesse: Zahl);
       function    groesse: Zahl;
       function    getroffen(pHPosition, pVPosition: Zahl): Wahrheitswert;
       procedure   aktiviere;
       procedure   deaktiviere;
       destructor  gibFrei;
     end;

implementation

constructor Kreis.init(pHPosition, pVPosition, pGroesse: Zahl);
begin
  hatStift := Buntstift.init;
  zGroesse:=pGroesse;
  hatstift.bewegeBis(pHPosition,pVPosition);
  self.zeichne
end;

procedure   Kreis.zeichne;
begin
  hatStift.zeichneKreis(zGroesse)
end;

procedure   Kreis.loesche;
begin
  hatStift.radiere;
  self.zeichne;
  hatStift.normal
end;

procedure   Kreis.setzeFarbe(pFarbe: GanzeZahl);
begin
  self.loesche;
  hatStift.setzeFarbe(pFarbe);
  self.zeichne
end;

procedure   Kreis.bewegeBis(pHPosition, pVPosition: Zahl);
begin
  self.loesche;
  hatStift.bewegeBis(pHPosition,pVPosition);
  self.zeichne
end;

procedure   Kreis.bewegeUm(pHDistanz, pVDistanz: Zahl);
begin
  self.bewegeBis(self.hPosition+pHDistanz, self.vPosition+pVDistanz)
end;

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

function    Kreis.vPosition: Zahl;
begin
  result := hatStift.vPosition
end;

procedure   Kreis.setzeGroesse(pGroesse: Zahl);
begin
  self.loesche;
  zGroesse := pGroesse;
  self.zeichne
end;

function    Kreis.groesse: Zahl;
begin
  result := zGroesse
end;

function    Kreis.getroffen(pHPosition, pVPosition: Zahl): Wahrheitswert;
begin
  result := (pHPosition-self.hPosition)*(pHPosition-self.hPosition)+
    (pVPosition-self.vPosition)*(pVPosition-self.vPosition) < zGroesse*zGroesse
end;

procedure   Kreis.aktiviere;
begin
  self.loesche;
  hatStift.setzeLinienbreite(3);
  self.zeichne
end;

procedure   Kreis.deaktiviere;
begin
  self.loesche;
  hatStift.setzeLinienbreite(1);
  self.zeichne
end;

destructor  Kreis.gibFrei;
begin
  self.loesche;
  hatStift.gibFrei
end;

end.