Instanz einer Klasse wird nicht gelöscht (Code = Müll?^^)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Instanz einer Klasse wird nicht gelöscht (Code = Müll?^^)

BeitragMi, März 24, 2010 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.

Ich bin immernoch dabei eine Methode zu schreiben, die dafür sorgt, dass die Basen nicht zu dicht beieinander liegen.
Der Code ist komplett durchkommentiert, deshalb poste ich einfach mal die Methode:

BlitzMax: [AUSKLAPPEN]
Method SetAtPlace() 'Method to make sure that the distance between the Bases isn't too short
Local Tries:Int = 0 'Variable for the Amount of Tries
Local IsSet:Int = 0 'Variable which is true if the distance is large enough
Local Stop:Int = 0 'Variable to break the Loop

While Stop = 0 'Loop
Tries:+1 'Tries is Set one up
For Local Base:TBase = EachIn TBase.AllBases 'Loop for all Bases in List
If Base <> Self Then 'Make sure that tested Base isn't the Base which called the Method
If (Pythagoras(iX, iY, Base.iX, Base.iY) < 100) Then 'Pythagoras to calculate the distance (should be over 100)
iX = Rand(64, GraphicsWidth() - 64) 'If distance is smaller than 100 give new X-Coordinate
iY = Rand(64, GraphicsHeight() - 64) 'As well a ne Y-Coordinate
IsSet = 0 'Set IsSet to Zero because there was a too little distance
Else 'If distance is bigger than 100
IsSet = 1 'IsSet gets the Value one because Distance is high enough
EndIf
EndIf
Next
If (Tries >= 5) Then 'If the Program ran through the MainLoop 5 times set exit condition to true
Stop = 1 'Exit Condition is set true
If (IsSet = 0) Then Self.Destroy() 'If the distance was too small in each cycle delete this instance
EndIf
If IsSet = 1 Then Stop = 1 'Set Exit Condition true if IsSet is true
Wend
End Method


Das Problem ist, dass es immernoch eingie Basen gibt, die sich berühren, bzw zu dicht sind. Das heißt entsprechende Basen werden nicht gelöscht.
Das versteh ich aber nicht, da meine Bedinungen eigentlich nur folgende Sachen zulassen: Entweder die Instanz bleibt bestehen, weil die Distanz groß genug ist, oder sie wird gelöscht, weil die DIstanz innerhalb von 5 Versuchen zu klein war.

Hier ist auch noch der Destruktor:

BlitzMax: [AUSKLAPPEN]

Method Destroy()
AllBases.Remove(Self)
End Method


Vielleicht kann mir ja jemand helfen, ich hoffe es jedenfalls.

Lg, M0rgenstern

mpmxyz

BeitragMi, März 24, 2010 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
IsSet = 1

Das muss vor die Schleife gesetzt werden, damit "IsSet" nach der Korrektur nicht beim nächsten Objekt wieder auf 1 gesetzt wird.
Dann sollte es funktionieren.
mfG
mpmxyz
Edit: Sonst würde nur das letzte Objekt über den Status bestimmen.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Holzchopf

Meisterpacker

BeitragMi, März 24, 2010 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ist noch ein Prinzipfehler drin, schliesslich soll ja die Basis, nach dem Verschieben, wieder mit allen Basen durchgeprüft werden.


Ich würde folgendes Schema anwenden:
BlitzMax: [AUSKLAPPEN]
Method SetAtPlace()
Local tries:Int=0
While _BaseInRange()
tries:+1
' wenn tries > 5, löschen und methode verlassen
' Koordinaten neu setzen
Wend
End Method

' gibt true zurück, wenn eine andere Basis zu nahe liegt.
Method _BaseInRange:Int()
For Local base:TBase = EachIn TBase
If base <> Self
Local dx:Int = base.iX -Self.iX
Local dy:Int = base.iY -Self.iY
' aus dem Phytagoras Wurzel(dx^2 +dy^2) = Distanz wird
' gerne mal aus rechentechnischen Gründen
' dx*dx +dy*dy = Distanz*Distanz
If dx*dx +dy*dy <10000
Return True
EndIf
EndIf
Next
Return False
End Method


mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

M0rgenstern

BeitragMi, März 24, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, Vielen Dank.

Jetzt klappts.
Stimmt ja, war eigentlich logisch.

Mein Fehler.
Hatte eigentlich gehofft, dass mir sowas beim kommentieren auffällt.

Vielen Dank nochmal.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group