Highscore - Tool

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Highscore - Tool

Beitrag 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
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Genau, an dieser stelle bietet sich CompilerIf an!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten