Problem mit Types

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Problem mit Types

BeitragMo, März 24, 2008 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, hab ein kleines Problem mit einem Type, Ich will prüfen ob die Position des einen Spielers die selbe ist wie die Position eines anderen.
Leider wird bei der Überprüfung auch der geprüft ob die Position des ersten Spielers die gleiche ist wie die des ersten spielers, was natürlich zutrifft.
Wie kann ich das ändern?
hier mein Code: [AUSKLAPPEN]
Type Spieler
   Field spieler_x
   Field spieler_y
End Type

anzahl = 500

For i = 1 To anzahl
   info.Spieler =  New Spieler
   info\spieler_x = Rand(1,800)
   info\spieler_y = Rand(1,600)
Next

For info.spieler = Each Spieler
   If info\spieler_x = info\spieler_x Then
      If info\spieler_y = info\spieler_y Then anzahleinheiten = anzahleinheiten +1
   EndIf
Next
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Eingeproggt

BeitragMo, März 24, 2008 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Beispiel so:

Code: [AUSKLAPPEN]
Type Spieler
   Field spieler_x
   Field spieler_y
End Type

anzahl = 500

For i = 1 To anzahl
   info.Spieler =  New Spieler
   info\spieler_x = Rand(1,800)
   info\spieler_y = Rand(1,600)
Next

For info.spieler = Each Spieler
  For info2.spieler = Each Spieler
     If info\spieler_x = info2\spieler_x And info<>info2 Then
        If info\spieler_y = info\spieler_y Then anzahleinheiten = anzahleinheiten +1
     EndIf
  Next
Next


Wird allerdings bei vielen Einträgen etwas heikel, so eine doppelte For-Schleife.

mfG

mabox

BeitragMo, März 24, 2008 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
warum? braucht das viel Prozessorleistung? oder was?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
  • Zuletzt bearbeitet von mabox am Mo, März 24, 2008 18:25, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragMo, März 24, 2008 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
naja ... es braucht n^2 schleifendurchläufe, wobei n die anzahl einträge ist.
Insofern nehme ich an kannst du dir vorstellen in welchem masse mehr einträge die rechenzeit beeinträchtigen, oder? Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Eingeproggt

BeitragMo, März 24, 2008 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst selbst bemerken, wie lange der Prozessor in solchen Schleifen bleibt, abhängig von der Anzahl der Einträge.

In deinem Fall würde er 500 mal 500 Einträge überprüfen. Also die erste If-Bedingung wird 250.000mal durchgangen. Wohlgemerkt: Immer mit anderen Daten, also es ist notwendig, so einen Aufwand zu betreiben.

mfG, Christoph.

mabox

BeitragMo, März 24, 2008 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank erstmal!
Aber leider funktionierts noch nicht ganz so wie ich es haben will, am schluss soll nämlich an jeder Position die Anzahl der einheiten stehen die dort vorhanden ist. Bis jetzt kommt etwas vollkommen falsches dabei heraus Crying or Very sad

EDIT: habs jetzt, der Fehler war hier Code: [AUSKLAPPEN]
For info.spieler = Each Spieler
   For info2.spieler = Each Spieler
      If info\spieler_x = info2\spieler_x And info<>info2 Then
         If info\spieler_y = info2\spieler_y And info<>info2 Then info\spieler_einheiten = info\spieler_einheiten +1
      EndIf
   Next
Next

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, März 24, 2008 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Anstatt Types mit 2 For Next Schleifen zu vergleichen
ist diese hier wesentlich besser geeignet,
da hier keine doppelt abgefragt werden

Code: [AUSKLAPPEN]
    For a1.nn = Each nn
        a2.nn = After a1
       
        While a2 <> Null
           
            If a1\x = a2\x Then
             ;mach was   
            End If
           
            a2 = After a2
        Wend
    Next
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group