Highscore erstellen!!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

... soll heißen das du die Variablen in meine Procedure ändern musst
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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

STARGÅTE hat geschrieben:... soll heißen das du die Variablen in meine Procedure ändern musst
die Fehlermeldung besagt, dass es sich um die Variablen handelt, die der
Procedure als Parameter übergeben werden. Im besten Fall muss man also
nur diese ändern.

@St@ndFurz:

Welche PB-Version verwendest Du? Schreib's am besten in Deine Signatur.

Grüße ... Kiffi
a²+b²=mc²
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag von D4uS1 »

Ich verwende die Version 3.94
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

:? Lad dir halt die 4.00 runter (es sei denn, du hast sie nicht gekauft....)
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag von D4uS1 »

ok hab ich gemacht, aber ich habs trotzdem noch nit hinbekomme
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du kannst z.b. ne struct machen, die score und name enthält.

damit machst du ein array, das 11 zeilen hat.

die aktuelle score tust du immer in die 11te, und sortierst dann nach score.

die ersten 10 speicherst du ab.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Hab das Beispiel gefunden is aber PB 3.90 glaub ich, uralt

Code: Alles auswählen

Structure hsc  ; Structure+List
  name.s
  punkte.l
  date.l
EndStructure

NewList Score.hsc()


Procedure LoadHighScore()  ; Hier wird ein Highscore geladen um bearbeitet zu werden
  If ReadFile(0,"HighScores.high")  ; Datei in der der Highscore gespeichert wird
    For x = 0 To 9  ; Eintrag für eintrag laden
      hname.s = ""
      For y = 0 To 9  ; Buchstabe für Buchstabe "entschlüsseln"
        Word.w = ReadWord()
        If Word <> 1
          hname.s + Chr(Word/3)
        EndIf
      Next
      AddElement(Score())
      Score()\name = hname
      Score()\punkte = ReadLong()
      Score()\date = ReadLong()
    Next
    CloseFile(0)  ; Zu damit
    ProcedureReturn 1
  Else
    ProcedureReturn 0  ; Misserfolg
  EndIf

EndProcedure

Procedure SortHighScore(namei$,pointis)  ; Hier kann man einen neuen Eintrag in den zuvor mit LoadHighScore geöffneten Highscore einsortieren
  ; der Erste Parameter ist der Name, der Zweite die Punktzahl, Rückgabewert ist welcher Platz erreicht wurde
  
  SelectElement(Score(),0)

  ForEach Score()  ; hier wird der Highscore durchgegangen...
    If Score()\punkte < pointis  ; ...und bei bedarf einsortiert
      If ListIndex(Score()) = 0
        ResetList(Score())
      Else
        PreviousElement(Score())
      EndIf
      pltz = ListIndex(Score())+2
      AddElement(Score())
      Score()\name = namei$
      Score()\punkte = pointis
      Score()\date = Date()
      LastElement(Score())  ; Und hier wird das überstehende Element...
      DeleteElement(Score())  ; ...gelöscht
      Break
    EndIf
  Next

  
  
  ProcedureReturn pltz  ; Und hier wird der erreichte Platz ausgegeben (0 = kein highscore)

EndProcedure

Procedure SaveHighScore()  ; Das hier einfach zum speichern nach Load und Sort Highscore

  If CreateFile(0,"HighScores.high")  ; Datei in der der Highscore gespeichert wird


    For x = 0 To 9  ; 10 Einträge werden gemacht (also 0-9)
      SelectElement(Score(),x)
      For y = 0 To 9  ; Jeder Eintrag wird ein bisschen Amatörverschlüsselt
        If Mid(Score()\name,y+1,1)
          WriteWord(Asc(Mid(Score()\name,y+1,1))*3)
        
        Else
          WriteWord(1)
        
        EndIf
      Next
      WriteLong(Score()\punkte)  ; Punkte schreiben
      WriteLong(Score()\date)  ; Datum schreiben
    Next
  
    CloseFile(0)  ; Zu damit
    ProcedureReturn 1
  Else
    ProcedureReturn 0  ; Misserfolg
  EndIf    
  
EndProcedure

Procedure CreateHighScore()  ; Zum erstellen oder löschen eines Highscores
  If CreateFile(0,"HighScores.high")  ; Datei in der der Highscore gespeichert wird

    hname.s = "KeyKon"  ; Name den jeder Eintrag kriegt (Kann natürlich einfach leer gelassen werden...)
    For x = 0 To 9  ; 10 Einträge werden gemacht (also 0-9)
      For y = 0 To 9  ; Jeder Eintrag wird ein bisschen Amatörverschlüsselt
        If Mid(hname,y+1,1)
          WriteWord(Asc(Mid(hname,y+1,1))*3)
        Else
          WriteWord(1)
        EndIf
      Next
      WriteLong(100-(x*10))  ; Hier kommt hin wieviel Punkte jeder eintrag kriegen soll (Hier mit nach ansteigend von 100 bis 10)
      WriteLong(ParseDate("%dd.%mm.%yyyy %hh:%ii","03.06.2005 01:00"))  ; Und hier kann man ein Datum reinschreiben, z.B. das erstellungsdatum das spieles als gag oder so...
    Next
  
    CloseFile(0)  ; Zu damit
    ProcedureReturn 1
  Else
    ProcedureReturn 0  ; Misserfolg
  EndIf
EndProcedure
Ich geb ja zu es ist unübersichtlich, und es ist vielleicht auch nicht die beste Variante, aber es ist dynamisch und mit speichern, laden und mit einem "Leseschutz"...
Ich hoffe du kannst vll was abguggen oder übernehmen...

KeyKon
(\/) (°,,,°) (\/)
Antworten