Types sortieren

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

fliege

Betreff: Types sortieren

BeitragSo, Dez 05, 2004 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich sitzte jetzt etwa zwei Stunden und versuche heraus zu finden, wie ich Types nach der Größe sortieren kann! Doch bin ich noch nicht auf eine wahre Lösung gekommen, also frage ich hier mal nach, ob jemand weis, wie das geht. Ein Pseudo - Code reicht mir, oder auch theoretisch beschrieben, welche Funktionen ich brauche,....
Ich wäre euch sehr dankbar.
Credits Eintrag ist natürlich auch drin Wink
Danke schon mal für eure Antworten
Fliege

Splinner

BeitragSo, Dez 05, 2004 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
beschreib mal genauer...wie ? typs nach größe sortieren?
meinst du in einer schleife? ich kann mir nichtz wirklich vorstellen wie du es meinst....
 

OJay

BeitragSo, Dez 05, 2004 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
man benutze die suche und verwende "bubblesort" oder "quicksort" als suchbegriff.
 

fliege

BeitragMo, Dez 06, 2004 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, ich will einen Type OnlineScore der größe nach sortieren. Dabei sol anhand des Feldes score sortiert werden.Also wenn es ungefähr so aussieht:
BlitzBasic: [AUSKLAPPEN]
Type OnlineScore
Field name$
Field score
End Type
Global g_Score.OnlineScore

g_Score = New OnlineScore
g_Score\name$ = \"Lukas\"
g_Score\score = 1000

g_Score = New OnlineScore
g_Score\name = \"Simon\"
g_Score\score = 500

g_Score = New OnlineScore
g_Score\name = \"Raphael\"
g_Score\score = 3000

...Dann sollte am Ende einer Schleife folgendes herauskommen:
1.Platz : Simon
2.Platz : Lukas
3.Platz : Raphael
Welche Schleife ist mir eigentlich egal, ich bin für alles dankbar!
Freue mich wieder auf die nächsten Antworten
Fliege

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Dez 06, 2004 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, hab mal was fertig gemacht, mit Beispiel

wer was schnelleres hat , her damit......BlitzBasic: [AUSKLAPPEN]
Graphics 640 ,480,16,2
SetBuffer BackBuffer ()
Type Liste Field NN$,points End Type

For t = 0 To 15
Liste.Liste = New Liste
Read Liste\NN$
Read Liste\points
Next

zeige (10)
Insert_sort_Type_II ()
zeige (300)
WaitKey
End

Function Insert_sort_Type_II () ;(C)Rallimen
For Liste.Liste = Each Liste : gs = gs + 1 : Next
bs = 1

Repeat
Liste.Liste = Last Liste
Insert Liste Before First Liste
Liste.Liste = First Liste
points_1 = Liste\points
X = 1
bs = bs + 1

Repeat
If bs = x Then Exit
Liste.Liste = After (Liste)
X = X + 1

If points_1 < Liste\points Then
Insert Liste Before Before Liste
Liste.Liste = After (Liste)
Else
Exit
End If

Forever

Until gs = bs

End Function

Function zeige (x)

For q.Liste = Each Liste
c = c + 15
Text x + 10 , 10 + c, q\NN$
Text x + 100 ,10 + c, q\points
Next

Flip
End Function

Data \"Rallimen\",1234,\"Ralf\",1245,\"Name 1\",785,\"Name 2\",4568,\"Atilla\",215,\"Jimmy\",201
Data \"fliege\",2234,\"Lukas\",1745,\"Frank\",795,\"Name 3\",4578,\"Atilla\",1315,\"xxx\",2080
Data \"Egal\",1734,\"tnt\",1242,\"beginner\",785,\"Elite\",4668,\"Atilla\",248,\"Loser\",235
[BB2D | BB3D | BB+]
 

zocker2150

BeitragMo, Dez 06, 2004 2:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem hatte ich auch diese verdammten Types (so gut sie auch sonst sind) zu sortieren.
Hab es dann so gemacht, dass ich sortiert Einfüge damit hab ich das Problem etwas umgangen.
Ich verwende zudem auch noch ein Dim-Feld mit dem ich gleich die Highscoreliste erzeuge.
Hier...
BlitzBasic: [AUSKLAPPEN]
; OnlineScore
Type OnlineScore
Field name$
Field score%
End Type

Dim Liste.OnlineScore(11)

; Rang% ist mein übergabeparameter mit dem ich vorher schon den Platz ermittelt habe
; und ihn hier dann in den Typs an richtiger Stelle schreibe.

; maxplayer ist die Anzahl der schon belegten Plätze in der Highscore


; verschieben der Types und erstellen des zusätzlichen, wenn Rang mitten in OnlineScore vorhanden
If Rang% <= maxplayer Then
Liste.OnlineScore(maxplayer+1) = New OnlineScore
For i = maxplayer To Rang% Step -1
; eins nach unten schieben i = i+1
Liste(i+1)\name$ = Liste(i)\name$
Liste(i+1)\score% = Liste(i)\score%
Next
End If

; Spielerdaten in Type sichern
Liste.OnlineScore(Rang%) = New OnlineScore
Liste(Rang%)\name$ = SpielerName$ ; Wirst ja irgendwo gespeichert sein Wink
Liste(Rang%)\score% = Punkte% ; jo...


Das in einer Funktion mit den übllichen Parametern evtl. kannst die benötigten Variablen (SpielerName$ Punkte%) auch Global machen.

Das setzt natürlich voraus, das du die Highscore frisch erzeugst was ja meist der fall ist. Wenn du schon Werte hast musst du sie in die Liste einfügen als ob gerade jemand gespielt und gewonnen hat.
 

fliege

BeitragMo, Dez 06, 2004 7:46
Antworten mit Zitat
Benutzer-Profile anzeigen
dankeschön, werde sie gleich heute Mittag ausprobieren. Muss mir noch die Namen Rausschreiben, sodass ihr in die Credits kommt!
Fliege

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group