program Billard12;

uses
  mSum,
  mKugel in 'mKugel.pas',
  mReibungskugel in 'mReibungskugel.pas',
  mFarbkugel in 'mFarbkugel.pas',
  mSpurkugel in 'mSpurkugel.pas',
  mNrKugel in 'mNrKugel.pas',
  mPulsierkugel in 'mPulsierkugel.pas';

var
  derBildschirm : Bildschirm;
  dieMaus       : Maus;
  meineKugel,
  weitereKugel  : Kugel;
  dritteKugel   : Reibungskugel;
  vierteKugel   : Farbkugel;
  fuenfteKugel  : Spurkugel;
  sechsteKugel  : NrKugel;
  siebteKugel   : Pulsierkugel;

begin
  // Initialisierung
  derBildschirm := Bildschirm.init;
  dieMaus       := Maus.init;
  meineKugel    := Kugel.init(20,50,0.5,75);
  meineKugel.merke(derBildschirm);   // Kennt-Beziehung herstellen
  weitereKugel  := Kugel.init(300,250,0.1,111);
  weitereKugel.merke(derBildschirm); // Kennt-Beziehung herstellen
  dritteKugel   := Reibungskugel.init(200,120,1.5,223);
  dritteKugel.merke(derBildschirm);  // Kennt-Beziehung herstellen
  vierteKugel   := Farbkugel.init(420,300,0.5,115,ROT);
  vierteKugel.merke(derBildschirm);   // Kennt-Beziehung herstellen
  fuenfteKugel  := Spurkugel.init(300,50,0.2,200);
  fuenfteKugel.merke(derBildschirm);   // Kennt-Beziehung herstellen
  sechsteKugel  := NrKugel.init(250,280,0.1,20,6);
  sechsteKugel.merke(derBildschirm);   // Kennt-Beziehung herstellen
  siebteKugel  := Pulsierkugel.init(400,150,0.6,325);
  siebteKugel.merke(derBildschirm);   // Kennt-Beziehung herstellen

  // Aktionsteil
  meineKugel.zeichne;
  weitereKugel.zeichne;
  dritteKugel.zeichne;
  vierteKugel.zeichne;
  fuenfteKugel.zeichne;
  sechsteKugel.zeichne;
  siebteKugel.zeichne;
  repeat
    meineKugel.bewege;
    weitereKugel.bewege;
    dritteKugel.bewege;
    vierteKugel.bewege;
    fuenfteKugel.bewege;
    sechsteKugel.bewege;
    siebteKugel.bewege;
  until dieMaus.istGedrueckt;

  // Aufräumen
  siebteKugel.gibFrei;
  sechsteKugel.gibFrei;
  fuenfteKugel.gibFrei;
  vierteKugel.gibFrei;
  dritteKugel.gibFrei;
  weitereKugel.gibFrei;
  meineKugel.gibFrei;
  dieMaus.gibFrei;
  derBildschirm.gibFrei
end.