"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 
- 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).
 
- In der uses-Liste sind die Units einzufügen.
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mTTeil, mTWeltBildManager;
 
 | 
 
- Die Referenz-Variablen werden eingefügt.
 
type
  TForm1 = class(TForm)
  private
    wbm  : TWeltBildManager;
    Teil : TTeil;
  public
    { Public-Deklarationen }
  end;
 | 
 
- In der Methode FormCreate werden Instanzen wbm und Teil erzeugt.
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  wbm  := TWeltBildManager.Create;
  Teil := TTeil.Create;
end;
 
 | 
 
- In der Methode FormDestroy werden die Instanzen freigegeben.
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  wbm.Free;
  Teil.Free;
end;
 
 | 
 
- 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;
 
 | 
 
- 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;
 | 
 
- Das Ereignis FormPaint wird mit dem Zeichnen beauftragt.
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  zeichneTeil;
end;
 
 |