Zur Themenübersicht        

Das Billardprojekt 3.1.: Die Klasse TSpielfeld

Projektdatei der ersten Lösung:

Erste einfache Lösung:

Die Attribute: 
Ein Spielfeld muss sich zeichnen können, also benötigt es wie die Kugel auch einen Stift.
Ein Spielfeld hat eine Position auf dem Bildschirm, gekennzeichnet durch die Koordinaten der linken oberen Ecke: xLinksOben , yLinksOben.
Ferner ist es gekennzeichnet durch seine Breite und seine Höhe.

Die Methoden:
Neben den Methoden zum Festlegen der Eigenschaften eines Spielfeldes , SetzeBreite, SetzeHoehe, SetzePosition braucht ein Spielfeld nur noch eine Methode, um sich selbst zu zeichnen.

Damit erhalten wir:

 

Code des Implementation-Teils der Spielfeldklasse:

Der Code ist einfach und erklärt sich selbst.
constructor TSpielfeld.init;
begin
  meinStift := Stift.init;
end;

procedure TSpielfeld.SetzeBreite (pBreite: Zahl);
begin
  Breite := pBreite
end;

procedure TSpielfeld.SetzeHoehe (pHoehe: zahl);
begin
  Hoehe := pHoehe
end;

procedure TSpielfeld.setzePosition (pXLinksOben: Zahl; pYLinksOben: Zahl);
begin
  xLinksOben := pXLinksOben;
  yLinksOben := pYLinksOben;
end;

procedure TSpielfeld.zeichne;
begin
  meinStift.bewegeBis(xLinksOben, yLinksOben);
  meinStift.zeichneRechteck(breite,hoehe);
end;

destructor TSpielfeld.gibFrei;
begin
  meinStift.GibFrei
end;

Code der zugehörigen Projektdatei:

Links Erklärung, rechts Code





Nicht vergessen: Die Spielfeldunit muss
                         eingebunden werden.




















Spielfeld erzeugen









Festlegen der Eigenschaften
des Spielfeldes

z e i c h n e n --------------------->



Hier kommt eine Schwäche des
Entwurfes zum Tragen:
Die Koordinaten zur Reflektion der 
Kugel müssen von der Programmiererin/
dem Programmierer gemerkt und als
Zahlen richtig eingesetzt werden
program Billard;

uses
  mSum,
  mUhr,
  mTKugel in 'mTKugel.pas',
  mTSpielfeld in 'mTSpielfeld.pas';

var
  //Objekte benennen
  derBildschirm : Bildschirm;
  dieMaus       : Maus;
  meinStift     : Stift;
  meineUhr      : Uhr;
  ersteKugel    : TKugel;
  zweiteKugel   : TKugel;
  dasSpielfeld  : TSpielfeld;


begin
  // Initialisierung
  derBildschirm := Bildschirm.init;
  dieMaus       := Maus.init;
  meinStift     := Stift.init;
  meineUhr      := Uhr.init;
  ersteKugel    := TKugel.init;
  zweiteKugel   := TKugel.init;
  dasSpielfeld  := TSpielfeld.init;

  // Aktionsteil

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

  zweiteKugel.setzePosition(500,400);
  zweiteKugel.SetzeGeschwindigkeit(-0.5);

  dasSpielfeld.setzeBreite(500);
  dasSpielfeld.SetzeHoehe(300);
  dasSpielfeld.setzePosition(100,200);
  dasSpielfeld.zeichne;

  repeat
    ersteKugel.bewege;
    zweiteKugel.bewege;
    if ersteKugel.GibXPos + 12 > 600 then
       ersteKugel.setzeGeschwindigkeit(-1);
    if ersteKugel.GibXPos - 12 < 100 then
       ersteKugel.setzeGeschwindigkeit(1);
    if zweiteKugel.GibXPos + 12 > 600 then
       zweiteKugel.setzeGeschwindigkeit(-0.5);
    if zweiteKugel.GibXPos - 12 < 100 then
       zweiteKugel.setzeGeschwindigkeit(0.5);
    meineUhr.warte(1)
  until dieMaus.istGedrueckt;


  // Aufräumen
  dasSpielfeld.GibFrei;
  ersteKugel.GibFrei;
  zweiteKugel.GibFrei;
  meineUhr.gibFrei;
  meinStift.gibFrei;
  dieMaus.gibFrei;
  derBildschirm.gibFrei
end.