Seite 2 von 2

Verfasst: 02.09.2006 16:17
von STARGÅTE
... soll heißen das du die Variablen in meine Procedure ändern musst

Verfasst: 02.09.2006 16:23
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

Verfasst: 02.09.2006 19:17
von D4uS1
Ich verwende die Version 3.94

Verfasst: 02.09.2006 19:20
von winduff
:? Lad dir halt die 4.00 runter (es sei denn, du hast sie nicht gekauft....)

Verfasst: 03.09.2006 18:10
von D4uS1
ok hab ich gemacht, aber ich habs trotzdem noch nit hinbekomme

Verfasst: 03.09.2006 18:15
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.

Verfasst: 05.09.2006 01:58
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