Jürgens Vorschlag, die Initialisierung per Code durchzuführen, ist insbesondere bei größeren Strukturen sinnvoll. Wichtig ist es dabei, das Schreiben von initialisierten Konstanten in den Compiler-Optionen zu aktivieren. Alternativ kann das Array in den VAR-Bereich verschoben werden. Die Prüfung der Indexberechnung entfällt, wenn der Index in jedem Schritt inkrementiert wird.
Sollen - wie in Marcos Beispiel angegeben - zwei gleiche Karten im Array hintereinander abgelegt werden, kann folgender Code benutzt werden:
Delphi-Quellcode:
var
Farbe : TKartenfarbe;
Wert : TKartenWert;
Index : Integer;
begin
Index := Low(AlleKarten);
for Farbe := Low(Farbe) to High(Farbe) do
for Wert := Low(Wert) to High(Wert) do
begin
AlleKarten[Index].Farbe := Farbe;
AlleKarten[Index].Wert := Wert;
Inc (Index);
AlleKarten[Index].Farbe := Farbe;
AlleKarten[Index].Wert := Wert;
Inc (Index);
end;
end;
Jürgen geht davon aus, daß zwei identische Kartenstapel hintereinander im Array abgelegt werden. Dies geht mit folgendem Code:
Delphi-Quellcode:
var
Stapel : Integer;
Farbe : TKartenfarbe;
Wert : TKartenWert;
Index : Integer;
begin
Index := Low(AlleKarten);
for Stapel := 1 to 2 do
for Farbe := Low(Farbe) to High(Farbe) do
for Wert := Low(Wert) to High(Wert) do
begin
AlleKarten[Index].Farbe := Farbe;
AlleKarten[Index].Wert := Wert;
Inc (Index);
end;
end;
Beim zweiten Code könnte man auf die äußere Schleife verzichten und die Kopie des ersten Stapels durch einen Move-Befehl erzeugen. Die dazu notwendigen Parameter (Zielindex und Umfang der Daten) müssen dann allerdings bei einer Änderung der Sets angepaßt werden.
Gruß Hawkeye