Types sortieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Christoph

Betreff: Types sortieren

BeitragDi, Okt 24, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich habe mal eine Frage. Und zwar will ich Spieler nach ihrer "Leistung" sortieren. Allerdings benutze ich Types.
Normalerweise benutze ich Bubblesort, was mit Types aber nicht funzt, da man nicht 2 gleiche Typeschleifen ineinanderschachteln kann.
Spontan ist mir nur eingefallen die Daten der Spieler in Dims einzulesen, zu sortieren und wieder in die vorigen Types einzuspeichern.

Gibt es eine bessere Lösung?
 

Dreamora

BeitragDi, Okt 24, 2006 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz spontan kannst du auch einfach die Types in einen Array packen und den sortieren.
Sehe allerdings nicht wo das problem sein sollte mit 2 verschachtelten TypeSchleifen.
Das geht problemlos solange man nicht vergisst die beiden schleifenvariablen unterschiedlich zu benennen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

NewJerzy

BeitragDi, Okt 24, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers doch so, dass alle infos über den Spieler in einer Datei abgespeichert werden! Die Dateien heißßen dann einfach so, wie die Spieler!

Dann ( um noch das mit dem Fähigkeiten ) machste einfach noch ein Punkte-System...

so, nun kannste die Dateien nacheinander öffnen und die Punkte vergleichen lassen! ( gibt bestimmt n Algorythmus hier oder es gibt schon ne Funktion in BB )

Und schwubb di wubb: Problem gelöst!!

Ich hoffe das war überhaupt das richtige, nich dass ich dich falsch verstanden habe Razz

D2006

Administrator

BeitragDi, Okt 24, 2006 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
öhmm ... NewJerzys Antwort vergessen wir lieber. Nur wegen einer kleinen Sortierung hier mit Datein rumzufuchteln ... lustigerweise erklärst du den wichtigen Algorithmus auch nicht... egal.

Bubblesort funktioniert auch mit Types prima, gibt da kein Problem. Kannst ja mal Code posten, wenn du Probleme hast.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Christoph

BeitragDi, Okt 24, 2006 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora
Du hast Recht, ist ja einfacher als ich gedacht habe Rolling Eyes
@NewJerzy
Da sich die Daten ständig ändern (fast jedes Frame), finde ich ständiges auslesen von Dateien eher umständlicher als meine Dim-Methode.

Danke das Problem hat sich jetzt gelöst Wink

edit:
@D2006
Danke, hab ich auch gerade an einem kleinen Beispiel bemerkt Wink
Komisch, dass ich so etwas noch nicht wusste, normalerweise kenne ich mich mit Types ziemlich gut aus, aber man kann halt immer noch etwas lernen Smile

x-pressive

BeitragMi, Okt 25, 2006 4:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Types nach einem bestimmten Feld sortieren:

BlitzBasic: [AUSKLAPPEN]

Function SortTypes()
Local Obj.MyType, NextObj.MyType, Obj1.MyType, Obj2.MyType
Local temp% ; <- VARIABLENTYP ANPASSEN (SIEHE wert)

NextObj = After First MyType
While NextObj <> Null
Obj = NextObj
NextObj = After Obj
Obj1 = Obj : temp = Obj\wert ; <- VARIABLE ANPASSEN
Repeat
Obj2 = Before Obj1
If Obj2 = Null Then Exit
If temp >= Obj2\wert Then Exit
Obj1 = Obj2
Forever
Obj2 = Obj : Insert Obj2 Before Obj1
Wend
End Function
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

StepTiger

BeitragMi, Okt 25, 2006 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso so umständlich?

Code: [AUSKLAPPEN]
dim typs.typ(5)

for x.typ=Each typ
   max=0
   for y=5 to 1 step -1
      if typs(y)<>Null
         if x\score>typs(y)\score
            max=y
         endif
      else
         max=y
      endif
   next
   if max>0
      for y=5 to max+1 step -1
         typs(y)=typs(y-1)
      next
      typs(max)=x
   endif
next


dürft funktionieren Smile

(mir fällt gerade auf, dass es vielleicht noch umständlicher ist als x-pressives code) Laughing
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

x-pressive

BeitragMi, Okt 25, 2006 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@StepTiger: deine Lösung setzt ein Array mit einer festen und bekannten Länge voraus -aber der Sinn, Types zu benutzen, liegt ja gerade darin, das man Listen unbestimmter Länge benutzen kann und nicht ständig die Anzahl der Elemente im Auge behalten muss. Wenn sich die Anzahl deiner Elemente ändert, musst du jedesmal deine Funktion anpassen.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Christoph

BeitragMi, Okt 25, 2006 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte nämlich, dass sich die Spieleranzahl ändert, sonst hätte ich kein Type genommen

@xpressive
Ich habe das so gemacht:
Zuerst werden die Spielerplätze verteilt:
Code: [AUSKLAPPEN]
i=1
For Player.t2=each t2
  Player\pos=i
  i=i+1
next


Dann wird geprüft:
Wenn der eine besser ist als der andere, aber dennoch den schlechteren Rang hat, wird getauscht.

Am Schluss sind zwar die Spieler nicht vertauscht aber die Spielerpositionen.

Und das reicht mir für mein Vorhaben... Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group