Zitat von
Luckie:
Ich würde da auch objektorientiert arbeiten. Das drängt sich ja geradezu auf.
Delphi-Quellcode:
type
TViech = class(TCollectionItem)
private
FLaenge: Real;
FHaare: Real;
//..weitere Eigenschaften
public
constructor Create(Collection: TCollection); override;
procedure Mutiere;
procedure Assign(Source: TPersistent);
//..weitere Methoden
property Laenge: Real read FLaenge write FLaenge;
property Haare: Real read FHaare write FHaare;
//..weitere Eigenschaften
end;
constructor TViech.Create(Collection: TCollection);
begin
inherited;
Laenge := 1; //Startparameter für ein Viech setzen
Haare := 1;
end;
//Die Methode Assign brauchst du um ein Viech einem anderen Viech zuweisen zu können
procedure TViech.Assign(Source: TPersistent);
begin
if Source is TViech then begin
FLaenge := TViech(Source).FLaenge;
FHaare := TViech(Source).FHaare;
//...weitere Eigenschaften
end;
end;
Die ganzen Viecher speicherst du in einer Collection ab.
Delphi-Quellcode:
type
TViecher = class(TCollection)
protected
function GetViech(Index: Integer): TViech;
procedure SetViech(Index: Integer; Value: TViech);
public
function Add: TViech;
function Insert(Index: Integer) : TViech;
property Viech[Index: Integer]: TViech read GetViech write SetViech; default;
end;
function TViecher.GetViech(Index: Integer): TViech;
begin
Result := TViech(inherited GetItem(Index));
end;
procedure TViecher.SetViech(Index: Integer; Value: TViech);
begin
inherited SetItem(Index, Value);
end;
function TViecher.Add: TViech;
begin
Result := TViech(inherited Add);
end;
function TViecher.Insert(Index: Integer): TViech;
begin
Result := TViech(inherited Insert(Index));
end;
Damit stehen dir alle Wege offen.
Delphi-Quellcode:
//Irgendwo im Hauptprogramm...
var BlaueViecher: TViecher;
RoteViecher: TViecher;
BlaueViecher := TViecher.Create(TViech); //Hier wird der Collection gesagt, von welchem Typ ihre Items sind!
RoteViecher := TViecher.Create(TViech);
//Neues Viech hinzufügen
BlaueViecher.Add //Fügt ein neues Viech mit den Standardvorgaben an
//Da "Add" eine Funktion ist, geht auch das:
var tempViech: TViech;
tempViech := BlaueViecher.Add; //tempViech verweist jetzt auf das neu angefügte Viech INNERHALB der Collection
tempViech.Mutiere; //und kann damit sofort weiter bearbeitet werden
//Eigenschaft eines Vieches ändern
BlaueViecher.Viech[1].Haare := 2;
//oder einem anderen Viech zuweisen
BlaueViecher.Viech[2].Assign(BlaueViecher.Viech[1]);
//oder mutieren
BlaueViecher.Viech[2].Mutiere;
//Die Anzahl der Viecher feststellen
BlaueViecher.Count;