Seite 1 von 1

Highscore - Tool

Verfasst: 09.06.2007 17:12
von michel51
Ich habe mir für ein Projekt ein Highscore-Tool geschrieben, dass ich hier mal
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
Es ist aber alles drin, was man normalerweise für einen Highscore braucht.

Wer's brauchten kann, bitte sehr :D

Verfasst: 09.06.2007 17:18
von ts-soft

Code: Alles auswählen

; ------- Hier gewünschte Schleife aktivieren ----------------- 

Wäre vielleicht sinnvoller ein Flag mit Defaultwert hinzuzufügen :wink:
Deklaration der Variablen wäre auch sinnvoll wenn es wiederverwendbar
sein soll.

Verfasst: 09.06.2007 21:22
von AND51
Genau, an dieser stelle bietet sich CompilerIf an!

Verfasst: 10.06.2007 01:07
von STARGÅTE
sry aber STARGÅTE

ist nur für die Boardsuche wichtig, falls jemand STARGATE sucht, findet er nix,

das Å ist ALT+0197 :wink:

Verfasst: 20.06.2007 18:39
von Kaeru Gaman
[OT]
> falls jemand STARGATE sucht, findet er nix
Suche hat geschrieben:Die Suche hat 100 Ergebnisse ergeben.
...wenn man nach dem begriff sucht, nicht nach dem usernamen.... ;)