AAARGHLLL:.....Grad beim Rauskopieren hab ich's gemerkt: Da steht in einer Schleife mal wieder to length(Array) statt to length(Array)-1. GRRRR und dafür debugt man 2 Tage lang....ich poste trotzdem mal etwas code, da ich mich mit dynamischen ARrays nicht wirklich auskenne bisher, vielleicht fällt ja jemandem irgendwas ziemlich dummes auf, was noch eleganter gemacht werden könnte...
Delphi-Quellcode:
type
TKarte = record
FarbWert: integer;
Farbe: String[5];
PunktWert: Byte;
Bildwert: Byte;
Bild: String[5];
name:string[12];
end;
TCardArray = Array of TKarte;
TDeskArray = Array of TCardArray;
TPlayer = Record
Cards:TCardArray;
ondesk:boolean;
name:string[30];
end;
Soweit die Typen, nun die 2 Methoden:
Delphi-Quellcode:
procedure TForm1.removeCard(var cardSet: TCardArray; cardname: string);
var aSize,i,index:integer;
begin
aSize := length(cardSet);
if (cardset[aSize-1].name = cardname) then
begin
setLength(cardSet,aSize-1);
end
else
begin
index := -1;
for i := 0 to aSize-1 do
if (cardSet[i].name = cardname) then
index := i;
for i := index to aSize-2 do
cardSet[i] := cardset[i+1];
setLength(cardSet,aSize-1);
end;
end;
procedure TForm1.SetToDesk(cardset: TCardArray);
var i:integer;
begin
setLength(CDesk[DeskNextFree],length(cardSet));
for i := 0 to Length(cardSet) do
CDesk[DeskNextFree][i] := cardSet[i];
inc(DeskNextFree);
end;
Und hier dann der Ausschnitt, wo der Aufruf stattfindet:
Delphi-Quellcode:
if (not checkset(tempCards))and(not checkrow(tempCards)) then
Statusbar1.SimpleText:='Diese Karten können nicht ausgelegt werden.'
else
begin
setToDesk(tempCards);
for i := 0 to Length(tempCards)-1 do
removeCard(Player1.cards,tempcards[i].name);
updateGUI('Desk');
updateGUI('Player1');
end;