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