jeden type gegen type prüfen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobbleboy

Betreff: jeden type gegen type prüfen

BeitragFr, Jul 30, 2010 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
	
For r=Each raum
For r=Each raum
j=j+1
Next
Next


wie kann ich jeden type gegen jeden type prüfen?

bei dem code oben kommt ein mav

Xeres

Moderator

BeitragFr, Jul 30, 2010 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For r1=Each raum
   For r2=Each raum
      if r1<>r2 then [...]
   Next
Next
Die Zugriffsvariablen müssen sich unterscheiden, ggf. musst du überprüfen, ob es sich nicht gerade um das selbe Objekt handelt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Fr, Jul 30, 2010 22:55, insgesamt einmal bearbeitet

mpmxyz

BeitragFr, Jul 30, 2010 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Local r1.TRaum,r2.TRaum
For r1=Each TRaum
For r2=Each TRaum
If r1=r2 Then Exit
;Mache etwas
Next
Next

mfG
mpmxyz
Edit: Eine Abfrage sollte dort wirklich noch rein...
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Bobbleboy

BeitragFr, Jul 30, 2010 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
das hatte ich mir auch gedacht, aber es kommt folgender fehler:
Zitat:
Index varible is not a NewType


bei dem code:
BlitzBasic: [AUSKLAPPEN]
	Repeat
r.raum = New raum
r\x=Rand(0,mapx)
r\y=Rand(0,mapy)
i=i+1
Until(i=2)
For r = Each raum
mapraum(r\x,r\y,mapx,mapy);zeichnet einen raum in die tilemap
Next

;ich möchte die abstände zwischen den räumen bestimmen

For r1=Each raum
For r2=Each raum
If r1=r2 Then Exit
If (r1\x-r2\x)^2+(r1\y-r2\y)^2 < 500^2
mapweg(r1\x,r1\y,r2\x,r2\y,mapx,mapy)
End If
Next
Next

mpmxyz

BeitragFr, Jul 30, 2010 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst BlitzBasic ja auch sagen, dass das Type-Referenzen sind.
(r1.raum bei der ersten Verwendung)
mfG
mpmxyz
Edit: 555 Beiträge... Smile
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Fr, Jul 30, 2010 23:12, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragFr, Jul 30, 2010 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Debugger einschalten und die markierte Zeile mit angeben und/oder lauffähigen Code posten. Sonst machen wir hier ewig Rätselraten.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Ana

BeitragSa, Jul 31, 2010 7:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type raum
   Field x
   Field y
End Type

Repeat
      r.raum = New raum
         r\x=Rand(0,mapx)
         r\y=Rand(0,mapy)
      i=i+1
   Until(i=2)
   For r.raum = Each raum
      bal = 1
   Next
   
   ;ich möchte die abstände zwischen den räumen bestimmen
   
   For r1.raum =Each raum
      For r2.raum=Each raum
         If r1=r2 Then Exit
         If (r1\x-r2\x)^2+(r1\y-r2\y)^2 < 500^2
            blub = 2
         End If
      Next
   Next


Du musst den Variablen noch sagen das sie nicht wie sonst standart mäßige ints sind sondern das sie die Adressen von Types Speichern sollen, sprich hinter jede Variable die einen Type speichern soll .[typename] in deinem Fall .raum.

Falls du im 3D programmierst kannst du statt dem Pyhtagoras auch EntityDistance nehmen das ist glaube ich schneller und du bekommst den Wert nicht im quadrat, was vielleicht später unangenehm ist wenn du nicht nur die Relation sondern den genauen wert brauchst und dann wurzeln ziehen musst.
 

Bobbleboy

BeitragSo, Aug 01, 2010 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
danke klappt jetzt alles Wink
BlitzBasic: [AUSKLAPPEN]
	;zeichnet einen weg wenn der abstand kleiner "abstand" ist
abstand = 14
For r1.raum=Each raum
For r2.raum=Each raum
If r1=r2 Then Exit
If (r1\x-r2\x)^2+(r1\y-r2\y)^2 < Rand(abstand)^2; And Rand(2)=1
mapweg(r1\x,r1\y,r2\x,r2\y,mapx,mapy)
r1\wege = r1\wege+1
r2\wege = r2\wege+1
End If
Next
Next
 

Bobbleboy

BeitragMo, Aug 02, 2010 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt es einen schnelleren weg den abstand zu prüfen?
für wenige hundert objekte gehts ja noch (außerhalb der mainloop)aber was wenn ich 1000 objekte habe?
dann sind das 1000*1000 schleifen durchgänge...
das dauert ewig....

Silver_Knee

BeitragMo, Aug 02, 2010 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
weniger
der erste raum kommt nicht weit der prüft ncht mal selbst, denn If r1=r2 Then Exit. der zweite prüft den ersten mit sich. der dritte den ersten und den zweiten. das send dann

0+1+2+3+4+5+...+998+999=999*998/2=498.501<1.000.000 (http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Summenformel)

BladeRunner

Moderator

BeitragMo, Aug 02, 2010 6:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Silver: ich denke ihm ging es da mehr um das Prinzip. Es sind kiloweise Überprüfungen, die eigentliche Zahl ist da Nebensache.
Bobble: Du wirst da nicht wirklich drum herum kommen, bei einem Netz steigt die Anzahl der Knoten nunmal exponentiell an.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group