Zur Themenübersicht     

Billardprojekt: Schritt2 Lösungen

Zur Erinnerung die Aufgabenstellung:

Schritt 2:

  1. Die Kugeln sollen sich nun mit unterschiedlichen Geschwindigkeiten bewegen können:
    à
    Erweitere die Kugelklasse um ein Attribut zGeschwindigkeit mit einer Methode SetzeGeschwindigkeit. Passe die Methode bewege an.
    à Ändere die Projektdatei dann so ab, dass auf dem Bildschirm zwei Kugeln vorhanden sind, von denen eine sich nach links, die andere nach rechts bewegt.
  2. Wenn sich eine Kugel aus dem Bildschirm bewegt hat, soll sie an der anderen Seite wieder erscheinen.
    Zur Lösung müssen noch weitere Änderungen an der Kugelklasse vorgenommen werden: Sie benötigt eine Anfrage für ihre aktuelle X-Position.
  3. Die Kugel soll nun am Rande des Bildschirms reflektiert werden. Überlege selbst, welche zusätzlichen Methoden eine Kugel dafür benötigt!

 

Hinweise zu den Lösungen:

Die für Teil b) und c) benötigte Kugelklasse:

In der Kugelklasse ist der Code der Methode 'bewege' zu verändern:

 
Änderung in rot.
procedure TKugel.bewege;
begin
     //Kugel an alter Stelle löschen
     meinStift.radiere;
     meinStift.bewegeBis(AkuelleXPos,AkuelleYPos);
     meinStift.zeichneKreis(10);

     //Kugel an neue Stelle bewegen
     AkuelleXPos := AkuelleXPos + AktuelleGeschwindigkeit;

     //Kugel neu zeichnen
     meinStift.normal;
     meinStift.bewegeBis(AkuelleXPos,AkuelleYPos);
     meinStift.zeichneKreis(10);
end;

Wenn geschickt mit dem UML-Editor gearbeitet wurde, ist der Code der neuen Methoden automatisch erzeugt worden:

 
Code der neue Methoden:.
procedure TKugel.SetzeGeschwindigkeit (pAktuelleGeschwindigkeit: Zahl);
begin
   AktuelleGeschwindigkeit := pAktuelleGeschwindigkeit
end;
function TKugel.GibXPos : Zahl;
begin
  result := AkuelleXPos
end;

 

Schliesslich ist die Projektdatei noch ein wenig abzuändern:
Hier ein Teil des geänderte Programmcodes 

erste Kugel ist weiter oben
und bewegt sich nach rechts

zweite Kugel ist weiter unten
und bewegt sich nach links




Wiederkehr der ersten Kugel

Wiederkehr der zweiten Kugel
Für Aufgabe 2b:

  ersteKugel.setzePosition (250,100);
  ersteKugel.SetzeGeschwindigkeit(1);

  zweiteKugel.setzePosition(80,300);
  zweiteKugel.SetzeGeschwindigkeit(-0.5);

  repeat
    ersteKugel.bewege;
    zweiteKugel.bewege;
    if ersteKugel.GibXPos > derBildschirm.breite then
       ersteKugel.setzePosition(0,100);
    if zweiteKugel.GibXPos < 0 then
       zweiteKugel.setzePosition(derBildschirm.breite,300);
    meineUhr.warte(1)
  until dieMaus.istGedrueckt;




Reflexion der ersten Kugel rechts

und links

Reflexion der zweiten Kugel rechts

und links
Hier nur die Schleife für 2c:

repeat
    ersteKugel.bewege;
    zweiteKugel.bewege;
    if ersteKugel.GibXPos > derBildschirm.breite then
       ersteKugel.setzeGeschwindigkeit(-1);
    if ersteKugel.GibXPos < 0 then
       ersteKugel.setzeGeschwindigkeit(1);
    if zweiteKugel.GibXPos > derBildschirm.breite then
       zweiteKugel.setzeGeschwindigkeit(-0.5);
    if zweiteKugel.GibXPos < 0 then
       zweiteKugel.setzeGeschwindigkeit(0.5);
    meineUhr.warte(1)
  until dieMaus.istGedrueckt;

Download der Lösung zu 2b

Download der Lösung zu 2c