ich versuche ein Vier-Gewinnt Spiel mit einem Drawgrid als Spielfeld und Shapes als Spielsteine zu realisieren.
Ich erzeuge jedesmal, wenn ich ein Spielstein ins Spielfeld einfüge, einen neuen Spielstein vom Typ TShape und weise der Eigenschaft parent des Spielsteines das Spielfeld zu:
Delphi-Quellcode:
procedure TFrm_VierGewinnt.SetzeSpielstein(Sender: TObject);
var spielstein : TShape;
begin
spielstein := TShape.Create(Sender as TComponent);
spielstein.Parent := Spielfeld;
//es folgen noch zuweisungen für größe,farbe,position etc...
end;
spielfeld.ComponentCount zeigt dann auch immer die Gesamtanzahl der Spielsteine an.
Will ich aber alle Spielsteine mit folgendem Code löschen:
Delphi-Quellcode:
procedure TFrm_VierGewinnt.Menu_Spiel_NeuClick(Sender: TObject);
var i : integer;
begin
for i := 0 to (Spielfeld.ComponentCount - 1) do
if Spielfeld.Components[i] is TShape then
Spielfeld.Components[i].Free;
end;
werden nur die roten steine entfernt, danach gibts die Fehlermeldung "List index out of bounds (AnzahlDerRotenSteine)"
1. wie kann der out of bounds sein, wenn ich den maximalwert vorher abgefragt hab?
2. warum kann ich eigentlich einem objekt TCanvas kein "parent" zuweisen?
[edit]
nach stundenlangem Tüffteln hab ichs geschafft
:
wenn ich eine Komponente lösche, läßt das alle anderen Komponenten "Nachrücken"; das ist auch der Grund, warum immer nur die Hälfte gelöscht wurde: nachdem z.b. 3 von 6 Komponenten/steine gelöscht wurden, stand i auf 3, es gab aber nur noch 3 Komponenten/steine, die letzte Komponente hatte also da den index [2] -> fehler
bleibt die Frage, warum shapes keine parent-eigenschaft haben?
[/edit]