Thema: Delphi Problem mit For-Schliefe

Einzelnen Beitrag anzeigen

Kopnop

Registriert seit: 20. Mai 2012
2 Beiträge
 
#1

Problem mit For-Schliefe

  Alt 20. Mai 2012, 22:07
Guten Abend,

ich arbeite schon seit ca. 1 1/2 Jahren von der Schule aus mit Delphi, hab aber erst seit ein paar Monaten damit angefangen in meiner Freizeit kleine Spiele zu proggen.
Jetzt hab ich aber ein Problem... oder so etwas Ähnliches^^
Mein Programm funktioniert auch problemlos, wenn ich es so lasse, wies jetzt is, da die Änderung nur im Quelltext zu sehen wäre und nichts am eigentlichen Programm ändern würde, aber ich wüsste gerne generell, ob und wie das geht.
Also, ich hab hier diesen Quelltext (inhaltlich müsst ihr nich drauf eingehen, geht mir nur um die For-Schleifen-Alternative):
(Das ist natürlich nicht der komplette Text aus der FormCreate, lediglich der relevante Teil)
Delphi-Quellcode:
 
procedure TSpielfeld1.FormCreate(Sender: TObject);
begin
  repeat
    hindernis1.initiate(clblue, random(image1.width - 20) + 10,random(image1.height- 20) + 10, random(40) + 81);
  until ((sqrt(sqr(abs(maus.x - hindernis1.hx)) + sqr(abs(maus.y - hindernis1.hy))) > (maus.r + hindernis1.hr) + 8));
  repeat
    hindernis2.initiate(clblue, random(image1.width - 20) + 10,random(image1.height- 20) + 10, random(40) + 81);
  until ((sqrt(sqr(abs(maus.x - hindernis2.hx)) + sqr(abs(maus.y - hindernis2.hy))) > (maus.r + hindernis2.hr) + 8));
  repeat
    hindernis3.initiate(clblue, random(image1.width - 20) + 10, random(image1.height - 20) + 10, random(40) + 81);
  until ((sqrt(sqr(abs(maus.x - hindernis3.hx)) + sqr(abs(maus.y - hindernis3.hy))) > (maus.r + hindernis3.hr) + 8));
  hindernis1.show;
  hindernis2.show;
  hindernis3.show;
end;
Ich arbeite mit Canvas und die Hindernisse sind alle Kreise vom Typ 'THindernis', die Maus ist auch ein Kreis vom Typ 'TMaus'.

Da das ja eigentlich immer das gleiche is - es nur einmal mit dem Hindernis 1, 2 und anschließend 3 gemacht wird, sollte sich das doch auch in eine For-Schleife umschreiben lassen, oder?
Ich hab mir das ungefähr so vorgestellt:
Delphi-Quellcode:
procedure TSpielfeld1.FormCreate(Sender: TObject);
var
i:integer;
begin
  for i:=1 to 3 do
begin
  repeat
    hindernis[i].initiate(clblue, random(image1.width - 20) + 10,random(image1.height- 20) + 10, random(40) + 81);
  until ((sqrt(sqr(abs(maus.x - hindernis1.hx)) + sqr(abs(maus.y - hindernis1.hy)))> (maus.r + hindernis1.hr) + 8));
  hindernis[i].show;
end;
end;
oder irgendwie so:
...(hindernis+i).initiate...
Aber wenn ich das so schreibe, erkennt er nich, dass ich 'hindernis1' ansprechen will, also weiß er auch nicth, dass er damit etwas machen soll.
Gibt es da vllt eine Variablenbezeichnung, die das möglich macht?

Ich hoffe, ihr versteht, was ich möchte und könnt mir helfen
MfG Kopnop
  Mit Zitat antworten Zitat