HSG

Aktuelle Seite: HSG/Fächer/Informatik/Material

"Evolutionäre Entwicklung" beim Tangram-Spiel, 1

evolution1.zip
Getreu der "Evolutionären Entwicklung" wollen wir uns zunächst ein System vornehmen, dass fast nichts kann, aber schon lauffähig ist. Wir benutzen schon hier das MVC-Schema und verwenden die Klasse TWeltBildManager ohne Veränderungen wieder.

Vorgehen

  1. Zuerst ist ein neues Projekt zu erzeugen, das z.B. im Ordner "evolution1" abgespeichert wird. Die Units mTeil und mWeltBildManager sind dem Projekt hinzuzufügen (Projekt/demProjekt hinzufügen).

  2. In der uses-Liste sind die Units einzufügen.
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, mTTeil, mTWeltBildManager;
    

  3. Die Referenz-Variablen werden eingefügt.
    type
      TForm1 = class(TForm)
      private
        wbm  : TWeltBildManager;
        Teil : TTeil;
      public
        { Public-Deklarationen }
      end;
    

  4. In der Methode FormCreate werden Instanzen wbm und Teil erzeugt.
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      wbm  := TWeltBildManager.Create;
      Teil := TTeil.Create;
    end;
    

  5. In der Methode FormDestroy werden die Instanzen freigegeben.
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      wbm.Free;
      Teil.Free;
    end;
    

  6. Die Instanzen wbm und Teil werden initialisiert.
    procedure TForm1.FormCreate(Sender: TObject);
    var
      P : TPArray;
    begin
      wbm  := TWeltBildManager.Create;
      wbm.berechneKoeffizienten(-2,6,-1,5,8*30,6*30);
      Teil := TTeil.Create;
      SetLength(P,3); // Speicher belegen
      P[0].x := 0; P[0].y := 0;
      P[1].x := 3; P[1].y := 0;
      P[2].x := 0; P[2].y := 3;
      Teil.setP(P);
      SetLength(P,0);                       // Speicher freigeben
      Teil.setFarbe(clRed);
    end;
    

  7. Die Methode zeichneTeil wird geschrieben.
    procedure TForm1.zeichneTeil;
    var
      BP    : array of TPoint;         // Bild-Polygon
      i,n   : integer;
      farbe : TColor;
    begin
      n := Length(Teil.getP);
      SetLength(BP,n);                 // Speicher reservieren
      for i := 0 to n-1 do             // Bild-Polygon mit transformierten Werten füllen
      begin
        BP[i].X := wbm.ut(Teil.GetP[i].x);
        BP[i].Y := wbm.vt(Teil.GetP[i].y);
      end;
      with canvas do
      begin
        fillrect(rect(0,0,8*50,6*50)); // löschen
        farbe := Brush.Color;          // Hintergrundfarbe merken
        Brush.Color := Teil.getFarbe;  // Füll-Farbe setzen
        Polygon(BP);
        Brush.Color := farbe;          // Hintergrundfarbe restaurieren
      end;
      SetLength(BP,0);                 // Speicher freigeben
    end;
    

  8. Das Ereignis FormPaint wird mit dem Zeichnen beauftragt.
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      zeichneTeil;
    end;