unit mKugel; interface uses mSuM; type Kugel = class hatStift: Stift; // die Kugel hat einen Stift, um sich zu zeichnen zRadius, zMinH, zMaxH, zMinV, zMaxV : 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); destructor gibFrei; end; implementation constructor Kugel.init(pAnfangH, pAnfangV: GanzeZahl; pGeschwindigkeit: Zahl; pRichtung: Zahl); begin zRadius:=5; zMinH :=10; zMaxH:=460; zMinV:=10; zMaxV:=360; 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 >= (zMaxH-zRadius-1) then // am rechten Rand self.setzeRichtung(180 - self.Richtung); // nach links reflektieren if self.hPosition <= (zMinH+zRadius+1) then // am linken Rand self.setzeRichtung(180 - self.Richtung); // nach rechts reflektieren if self.vPosition >= (zMaxV-zRadius-1) then // am unteren Rand self.setzeRichtung(360 - self.Richtung); // nach oben reflektieren if self.vPosition <= (zMinV+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; destructor Kugel.gibFrei; begin hatStift.gibFrei; // Stift wieder freigeben end; end.