unit mKugel; interface uses mSuM; type Kugel = class hatStift: Stift; // die Kugel hat einen Stift, um sich zu zeichnen kenntBildschirm: Bildschirm; // die Kugel kennt einen Bildschirm als Begrenzung zRadius : GanzeZahl; zGeschwindigkeit: Zahl; constructor init(pAnfangH, pAnfangV: GanzeZahl; pGeschwindigkeit: Zahl; pRichtung: Zahl); procedure Zeichne; procedure Loesche; procedure Bewege; function hPosition: Zahl; function vPosition: Zahl; function Richtung: Zahl; procedure setzeRichtung(pWinkel: Zahl); procedure merke(pBildschirm: Bildschirm); destructor gibFrei; end; implementation constructor Kugel.init(pAnfangH, pAnfangV: GanzeZahl; pGeschwindigkeit: Zahl; pRichtung: Zahl); begin zRadius:=5; zGeschwindigkeit:=pGeschwindigkeit; hatStift := Stift.init; // Stift erzeugen hatStift.bewegeBis(pAnfangH, pAnfangV); hatStift.dreheBis(pRichtung); 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 >= (kenntBildschirm.Breite-zRadius-1) then // am rechten Rand self.setzeRichtung(180 - self.Richtung); // nach links reflektieren if self.hPosition <= (zRadius+1) then // am linken Rand self.setzeRichtung(180 - self.Richtung); // nach rechts reflektieren if self.vPosition >= (kenntBildschirm.Hoehe-zRadius-1) then // am unteren Rand self.setzeRichtung(360 - self.Richtung); // nach oben reflektieren if self.vPosition <= (zRadius+1) then // am oberen Rand self.setzeRichtung(360 - self.Richtung); // nach unten reflektieren self.Zeichne; end; function Kugel.hPosition: Zahl; begin result:=hatStift.hPosition end; function Kugel.vPosition: Zahl; begin result:=hatStift.vPosition end; function Kugel.Richtung: Zahl; begin result:=hatStift.winkel end; procedure Kugel.setzeRichtung(pWinkel: Zahl); begin hatStift.dreheBis(pWinkel) end; procedure Kugel.merke(pBildschirm: Bildschirm); begin kenntBildschirm := pBildschirm end; destructor Kugel.gibFrei; begin hatStift.gibFrei; // Stift wieder freigeben end; end.