Einzelnen Beitrag anzeigen

VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#1

Freien Platz ermitteln

  Alt 27. Dez 2011, 16:53
Hallo zusammen, ich hab malwieder ein Problem.
Details die keine Rolle spielen lasse ich der einfachheit halber mal Weg, aber im Prinzip habe ich folgendes Problem: Mein Programm soll "Zähler" Kreise der Größe "Groesse" Zeichnen. Diese werden voher festgelegt. Die Y-Achsenposition ist immer gleich. Nun möchte nicht, dass er Kreise übereinanderzeichnet, also reicht KreisXPos:=Random(Bildschirmbreite) nicht. Ich hab schon ein bisschen im Internet gesucht und mir aus dem was ich gefunden hab eine Lösung zusammengebaut, die aber Leider nicht funktioniert.... aber warum? Hab es schon mit debuggen probiert, bin aber nicht dahintergekommen. Hier der entscheidende Codeausschnitt:

Delphi-Quellcode:
Var Frei: Array[1..2000] Of Integer; //Tatsächlich Freie Positionen (Wer hat schon mehr als 2000 Pixel als Auflösung? Ist nicht ideal, aber verfeinerungen kann man ja später noch einfügen.)
Var Belegung: Array [1..2000] of Boolean; // Positionen, die in irgendeiner Form von einem Kreis benutzt werden, nicht unbedingt als Ursprung

Procedure XpositionenFestlegen;
Var I,k,J,M:Integer;
Platz:Boolean;
Begin
Zähler:=Random(15); //Anzahl der Kreise

for I := 1 to Zähler do
 Begin
 Platz:=True;
 K:=0;
 Kreisanzahl:=Kreisanzahl+1;
 Groesse:=15;
 
 for J:=1 To Bildschirmbreite Do
 Begin
  if Belegung[J]=False then
  Begin
   Platz:=True;
   for M:=J-Trunc(Groesse/2) To Trunc(J+Groesse/2) DO //Groesse/2 Da der Radius zur einen und zur anderen Seite gemessen werden soll
   Begin
    If Belegung[M]=True Then Platz:=False //Wenn eine benötigten Flächen belegt ist, ist der Platz insgesamt nicht frei
   End;
   if (Platz=True) then
   Begin
    K:=K+1;
    Frei[K]:=J;
   End;
  End;
 End;
 X:=Frei[Random(K)];
 K:=0;
 KreisPosX:=X;
 For J:=KreisPosX-Trunc(Groesse/2) To (KreisPosX+Trunc(Groesse/2) Do //Fläche, die der neue Kreis einnimmt.
    Begin
    Belegung[J]:=True;
    End;
 End;
End;
(Unwichtiges, was ohne zusammenhang nur verwirren würde habe ich zum besseren Verständnis rausgeschnitten)
Meine Frage also: Kann mir jemand einen Tipp geben, was falsch ist oder wie ich das ganze besser machen könnte? Nur bitte keine Perfekte Lösung Posten, die werde ich als Anfänger wohl eh nicht verstehen - dann bringt es mir nichts, auch wenn es lieb gemeint ist. Danke euch

Geändert von VkPenguin (27. Dez 2011 um 17:05 Uhr)
  Mit Zitat antworten Zitat