Linked List sortieren...

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Firstdeathmaker

Betreff: Linked List sortieren...

BeitragDo, Aug 18, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, tschuldigung das ich so oft frage, ich versuchs auch immer erst etwas länger selber, aber hier komm ich mal wieder nicht weiter:

Ich möchte eine Highscoreliste nach Punkten sortieren. Auf der suche nach einem Befehl dafür bin ich auf "Sortlist" gestoßen, aber das verstehe ich noch nicht so wirklich. In der bmaxwiki stehen immer nur Beispiele für ein Alphabetisches direktes Sortieren der Werte. Wie kann ich jetzt dafür sorgen, dass er die Einträge nach den Punkten sortiert?

Code: [AUSKLAPPEN]


Global Highscorelist:TList = New TList

Type Highscoreeintrag
   Field name$
   Field punkte
   
   Method New()
      Highscorelist.addlast(Self)
   End Method
   
   Function Draw_Highscore(x,y)
   Local i
      For H:Highscoreeintrag = EachIn Highscorelist
         DrawText (i+1)+". "+H.name+" Points: "+H.punkte,x,y+(i*15)
         i:+1
      Next
   End Function
   
   Method Sort()
      Return punkte
   End Method
End Type

stream:TStream = OpenStream("highscore.txt")

While Eof(stream)=0
Local H:Highscoreeintrag = New Highscoreeintrag
   H.name$ = ReadLine(stream)
   H.punkte = Int(ReadLine(stream))
   DebugLog H.name+" "+H.punkte
Wend
CloseStream stream

SortList(Highscorelist,1)
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragDo, Aug 18, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür musst du in deinen Type eine Methode Compare packen, welche zwei Instanzen des gleichen Types vergleicht.
1 sagt other grösser is, 0 is gleich und bei -1 is das objekt, dass other kleiner ist (glaub das es so rum war, wenn nicht einfach -1 und 1 austauschen Wink )
zb

Code: [AUSKLAPPEN]

type Highscore
   field score:int

   method compare (other:object)
      if not Highscore (other) then ..
         return 0
      local o:Highscore = Highscore (other)
      if o.score > self.score
         return 1
      elseif o.score < self.score
         return -1
      endif
      return 0
   end method
end type


EDIT: Code wurde editiert
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Do, Aug 18, 2005 16:49, insgesamt einmal bearbeitet

Firstdeathmaker

BeitragDo, Aug 18, 2005 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert leider nicht, Fehlermeldung:

Overriding method differs by type
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Dreamora

BeitragDo, Aug 18, 2005 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok muss vom type object sein und danach halt anpassen.
habs oben geändert. Alternativ hättest du es natürlich auch versuchen können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragDo, Aug 18, 2005 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, jetzt funktionierts.

Ich bin leider noch nicht so gut mit den ganzen Neuerungen in BMax vertraut, deshalb bin ich warscheinlich auch nicht darauf gekommen das es ein normales "object" hätte sein müssen. Fürs nächste mal probier ich das aber noch aus.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group