Highscore

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 »

Ghost hat geschrieben:Ok klappt danke :)
:allright:

wenn du noch irgendetwas anders machen wills sag bescheit dann baue ich umm oder du testest selber ^^
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
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

hi, damit niemand die highscore fälschen kann wäre es noch gut wenn die punktezahl mit einer nur dem programmierer bekannten zahl multipliziert wird! dieses ergebnis wird dann in die txt geschrieben! wenn die z.B. highscore.txt ausgelesen wird wird das ergebnis wieder dividiert..... oda? :wink:

und ich denke du hast die gleiche gamers-edition 3.20 wie ich!!!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

onny hat geschrieben:hi, damit niemand die highscore fälschen kann wäre es noch gut wenn die punktezahl mit einer nur dem programmierer bekannten zahl multipliziert wird! dieses ergebnis wird dann in die txt geschrieben! wenn die z.B. highscore.txt ausgelesen wird wird das ergebnis wieder dividiert..... oda? :wink:

und ich denke du hast die gleiche gamers-edition 3.20 wie ich!!!
oder er verschlüsselt die Datei total :

Code: Alles auswählen

; Verschlüsselt einen String$
Procedure.s Code(String$)
 For m = 1 To 1
  CodeString$ = ""
  For n = 1 To Len(String$)
   Asc$ = Mid("00", 1, 3-Len(Str(Asc(Mid(String$, n, 1)))))+Str(Asc(Mid(String$, n, 1)))
   CodeString$ = CodeString$ + Chr(Val(Mid(Asc$,1,1))+71) + Chr(Val(Mid(Asc$,2,1))+72) + Chr(Val(Mid(Asc$,3,1))+73)
  Next n
  String$ = CodeString$
 Next m
 ProcedureReturn String$
EndProcedure

; Entschlüsselt einen String$
Procedure.s Decode(String$)
 For m = 1 To 1
  DecodeString$ = ""
  For n = 1 To Len(String$) Step 3
   Asc = Val(Str(Asc(Mid(String$, n, 1))-71)+Str(Asc(Mid(String$, n+1, 1))-72)+Str(Asc(Mid(String$, n+2, 1))-73))
   DecodeString$ = DecodeString$ + Chr(Asc)
  Next n
  String$ = DecodeString$
 Next m
 ProcedureReturn String$
EndProcedure
allerding wird dabei die Datei 3mal so groß, aber man hat keine chance was zu cheaten ^^
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
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

Hmm irgendwie funkst. das mit dem Verschlüsseln nicht bei mir.
Ich kann Das Textdokument immer noch umschreiben.

Oder erstellt PB ein neues nicht sichtbares Textdokument? Wenn ja, wie kann man dann den Higscore einsehen?
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

es ist zwar sichtbar, doch der "cheater" ( :lol: ) sieht darin nur einen zahlenbrei, diesen kann er nur löschen (somit ist die highscore weg) aber nicht fälschen!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

also hier die neue Proceduren mit verschlüsselung :

Code: Alles auswählen


; Verschlüsselt einen String$ 
Procedure.s Code(String$) 
 For m = 1 To 1 
  CodeString$ = "" 
  For n = 1 To Len(String$) 
   Asc$ = Mid("00", 1, 3-Len(Str(Asc(Mid(String$, n, 1)))))+Str(Asc(Mid(String$, n, 1))) 
   CodeString$ = CodeString$ + Chr(Val(Mid(Asc$,1,1))+71) + Chr(Val(Mid(Asc$,2,1))+72) + Chr(Val(Mid(Asc$,3,1))+73) 
  Next n 
  String$ = CodeString$ 
 Next m 
 ProcedureReturn String$ 
EndProcedure 

; Entschlüsselt einen String$ 
Procedure.s Decode(String$) 
 For m = 1 To 1 
  DecodeString$ = "" 
  For n = 1 To Len(String$) Step 3 
   Asc = Val(Str(Asc(Mid(String$, n, 1))-71)+Str(Asc(Mid(String$, n+1, 1))-72)+Str(Asc(Mid(String$, n+2, 1))-73)) 
   DecodeString$ = DecodeString$ + Chr(Asc) 
  Next n 
  String$ = DecodeString$ 
 Next m 
 ProcedureReturn String$ 
EndProcedure 

Procedure HighScore(Datei$, Punkte, Name$) 
 OpenFile(1, Datei$) 
 CreateFile(2, "_"+Datei$) 
  Repeat 
   UseFile(1) 
    String$ = Decode(ReadString())   ; << verändert
    HS_Punkte = Val(Trim(Mid(String$, 1, 10))) 
   UseFile(2) 
    If HS_Punkte < Punkte And Eingetragen = 0: 
     WriteStringN(Code(Str(Punkte)+Space(10-Len(Str(Punkte)))+Name$))    ; << verändert
     Eingetragen = 1 
    EndIf 
    WriteStringN(Code(String$))    ; << verändert
  Until String$ = "" 
 CloseFile(2) 
 CloseFile(1) 
 CopyFile("_"+Datei$, Datei$) 
 DeleteFile("_"+Datei$) 
EndProcedure 

HighScore("HS.txt", 23, "Test 1") 
HighScore("HS.txt", 4, "martin") 
HighScore("HS.txt", 124, "Stargate") 
HighScore("HS.txt", 1, "LOL") 
HighScore("HS.txt", 2341, "baum") 
Danach kannst du dann auch die Anwenden um die Datei zu verändern:

Code: Alles auswählen

; Verschlüsselt eine Datei
Procedure.s CodeFile(Datei$) 
 OpenFile(1, Datei$) 
 CreateFile(2, "_"+Datei$) 
 Repeat 
  UseFile(1) 
  String$ = ReadString()
  UseFile(2) 
  WriteStringN(Code(String$))
 Until String$ = "" 
 CloseFile(2) 
 CloseFile(1) 
 CopyFile("_"+Datei$, Datei$) 
 DeleteFile("_"+Datei$)  
EndProcedure 

; Entschlüsselt eine Datei
Procedure.s DecodeFile(Datei$) 
 OpenFile(1, Datei$) 
 CreateFile(2, "_"+Datei$) 
 Repeat 
  UseFile(1) 
  String$ = Decode(ReadString())
  UseFile(2) 
  WriteStringN(String$)
 Until String$ = "" 
 CloseFile(2) 
 CloseFile(1) 
 CopyFile("_"+Datei$, Datei$) 
 DeleteFile("_"+Datei$)  
EndProcedure 
Aber Achtung ! Verzettel dich nicht. Wenn du zuofft decodierst dann ist die Datei futsch ^^
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
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

also mit dem Verschlüsseln funkstioniert es bei mir.
Aber wie kann ich den Highscore jetzt sehen(hab vorherr immer die Textdatei geöffnet ).
Ich müste dann tehoretisch was schreiben, dass PB mir die Highscore am ende des spiels decodiert anzeigt oder?
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

@STARGÅTE
cooler code echt nicht schlecht :allright:
Antworten