reinstelle. Ist sicher nicht perfekt, macht aber, was es soll.
Kommentare sind hoffentlich genügend im Code, so dass sich jeder das ganze erweitern kann.
Code: Alles auswählen
; HighScore
;
; Original von STARGATE (aus dem deutschen Forum)
; modifiziert und erweitert von michel51 im Juni 2007
;
; erstellt mit Mac PB V.4.00 Beta 1
; getested unter Mac OS X und Windows XP
; Linux nicht getestet, sollte aber gehen, da nur PB-eigene Commands verwendet
;
;
Procedure ShowHighScore(Datei.s)
If OpenWindow(10, 0, 0, 260, 300, "Highscore", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(10))
ListIconGadget(0, 10, 10, 240, 240, "Pos", 50, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Name", 100)
AddGadgetColumn(0, 2, "Punkte", 60)
If ReadFile(1, Datei)
; ------- Hier gewünschte Schleife aktivieren -----------------
; While Eof(1) = 0 ; es wird alles angezeigt
For I = 1 To 10 ; es werden nur die ersten 10 angezeigt
String.s = ReadString(1)
Name.s = Left(String, 10)
Punkte.s = Mid(String, 11, 5)
pos+1
AddGadgetItem(0, -1, Str(pos)+Chr(10)+Name + Chr(10) + Punkte)
Next ; es werden nur die ersten 10 angezeigt
; Wend ; es wird alles angezeigt
; -------------------------------------------------------------
EndIf
CloseFile(1)
EndIf
EndIf
EndProcedure
Procedure HighScore(Datei.s, Name.s, Punkte.l)
If OpenFile(1, Datei) ; Datei wird geöffnet oder neu angelegt.
If CreateFile(2, "_"+Datei) ; Hilfsdatei erzeugen
; ------- Hier gewünschte Schleife aktivieren -----------------
; Repeat ; Alle werden gespeichert
For i = 1 To 10 ; nur die ersten 10 - 11 Besten
String.s = ReadString(1)
HS_Punkte = Val(Trim(Mid(String, 11, 10)))
If HS_Punkte < Punkte And Eingetragen = 0: ; vergleichen und richtig einsortieren
WriteStringN(2, LSet(name, 10, " ")+" "+Str(Punkte))
Eingetragen = 1
EndIf
WriteStringN(2, String)
Next ; Nur die ersten 10 - 11 Besten
; Until String = "" ; Alle werden gespeichert
; -------------------------------------------------------------
CloseFile(2)
EndIf
CloseFile(1)
EndIf
CopyFile("_"+Datei, Datei)
DeleteFile("_"+Datei) ; fertig, Highscoreliste ist gespeichert
EndProcedure
;
HSFile.s = "HScore.score"
; der Datei-Name sollte nach eigenem Geschmack angepasst werden
;
; Beispielaufrufe
HighScore(HSFile, "Test 1", 23)
HighScore(HSFile, "martin", 4)
HighScore(HSFile, "Stargate", 124)
HighScore(HSFile, "LOL", 1)
HighScore(HSFile, "baum", 2341)
HighScore(HSFile, "Namesehrlang", 55) ; überlanger Name
HighScore(HSFile, "Klaus", 198)
ShowHighScore(HSFile) ; ... und mal anzeigen
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Wer's brauchten kann, bitte sehr
