Habe einen Highscore erstellt, aber wie weiter?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Blitzkrieg Bop

BeitragSo, März 28, 2004 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
So!
Travis, ich habe den code überarbeitet, einiges gelöscht und eine Speicherung hinzugefügt, so das die Liste am Ende gespeichert wird.
Guck dir das bitte an, sag ob dir das Gefällt oder ob da Fhler drin sind.
Bei meinem Spiel ist dsa im Prinzip genauso, bloß man gibt vorher den Namen ein, also muss ich eigentlich nix mehr verändern oder?(außer vielleicht variabel-bezeichnungen) und wie ist das, wenn zu der Liste zum Beispiel noch die Level anzeige kommt, muss ich dafür auch nen neues DIM Feld machen? Danke im VOraus:

Code: [AUSKLAPPEN]

Graphics 1024,768,16,2


Dim Name$(11)
Dim Score(11)



; --- Liste laden 
Datei = ReadFile("Highscore.dat") 
Print
If Datei <> 0 Then ; Nur laden, wenn Liste auch vorhanden ist! 
For i = 1 To 10 
Name$(i) = ReadLine(Datei)   
Score(i) = ReadLine(Datei) 
Next 
CloseFile Datei 
EndIf




Text (1024/2),15,"Das ist die Liste aus dem Speicher:",True ;damit jeder bescheid weiß


; --- Liste anzeigen
For i = 1 To 10
Text (1024/2), i*20+50, i + "." + Name$(i) + " " + Score(i)
Next

; Ein neuer Eintrag wird geschrieben:

Locate 100,200
Print "Neuer Eintrag!"
Print
Locate 100,250
Name$(11) = Input("Name: ")
Locate 100,300
Score(11) = Input("Punke: ")




; --- Liste sortieren
For I = 1 To 11
For J = I To 11
If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst
MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA
MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$
EndIf
Next
Next


; --- Liste erneut anzeigen
For i = 1 To 10
;Print i + "." + Name$(i) + " " + Score(i)
Text x+(1024/2), i*20+380, i + "." + Name$(i) + " " + Score(i)
Text (1024/2),310,"Das ist die Liste, mit dem neuen Namen und sortiert:",True
Next






WaitKey

; was passiert, nachdem die liste sortiert wurde:

;--- Liste speichern
Datei = WriteFile("Highscore.dat")
For i = 1 To 10
WriteLine Datei, Name$(i)
WriteLine Datei, Score(i)
Next
CloseFile Datei

WaitKey

End
~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, scheint ja zu laufen. Wenn du jetzt noch das erreichte Level speichern willst musst du natürlich noch eine Liste machen

Code: [AUSKLAPPEN]

Dim Level(11)


und diese dann überall berücksichtigen. Beim sortieren z.B.

Code: [AUSKLAPPEN]

For I = 1 To 11
 For J = I To 11
  If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst
   MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA
   MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$
   MerkerC$ = Level(I): Level(I) = Level(J): Level(J) = MerkerC$
  EndIf
 Next
Next


Damit wäre die Funktion schon mal gegeben und man müsste es nur noch an das Spiel anpassen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! ich werde es einbinden! nun aber noch ne frage und zwar hab ich festgestellt, das die datei "Highscore.dat" nicht gerade gesichert ist ;D
ich hätte hier nen code, der eine datei verschlüsselt, was ich dann mit der highscore.dat machen würde, und am anfang des progs würde ich die entshclüsseln, in den speicher laden und wieder verschlüsseln.
soll ich das machen,m oder gibt es ne variante, die datei verschlüsselt zu schreieben, ohne viel vom jetzigen coder zu ändern?

(meine variante siehe :
[url]
https://www.blitzforum.de/viewtopic.php?t=2115
[/url]
)
~ Hey Ho Let's Go ~
  • Zuletzt bearbeitet von Blitzkrieg Bop am So, März 28, 2004 16:38, insgesamt einmal bearbeitet

Travis

BeitragSo, März 28, 2004 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich so in der Form noch nie versucht. Es wäre natürlich sinnvoll um Manipulationen an der Liste zu verhindern.

Man könnte die ganzen Namen vielleicht in einzelne Buchstaben aufteilen und dann ihre ASCII-Werte als Short-Variablen speichern. Das wäre allerdings etwas komplizierter.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
les dir das durch:

https://www.blitzforum.de/viewtopic.php?t=2115


Laughing
~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hast du's doch. Funktioniert prima. Smile
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
DAnke !
So, nunbereite ich gerade einen kleinen Test vor und du musst mir noch ne Frage beantworten! Wie kann ich dafür sorgen, das zum Beispiel:

Name$(11) = Input(">>")

Dieses 'Name$(11)' soll gloabl sein! wie kann ich das erreichen?
Folgendes geht nicht:



Code: [AUSKLAPPEN]

global Name$(11)


und erst recht nicht:

Code: [AUSKLAPPEN]

global Name$
~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dir wirklich mal ein paar Tutorials oder Hilfen durchlesen. Surprised DIM-Felder sind automatisch global.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
das hab ich mir auch gedacht! aber das geht irgendwie net!
also, ich poste dir jetzt hier als erstes die datei, in der das spiel ist und als nächstes die datei in der die highscore funktion steht!

Beide DAten in ein Verzeichnis und von dieser aus starten:
Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()

Include "highscore_1.bb"

Locate (1024/2),(768/2)+100
Name$(11) = Input(">>:")

Global Name$

Repeat
ClsColor 129,129,129
Cls

timer = timer + 1

Text 100,100,"Deine Punkte:"+Punkte
Text 100,150,"Der Timer:"+timer


If KeyHit(28)
Punkte = Punkte  + 1
EndIf


If timer > 200
highscore()
EndIf




Flip
Forever



und hier die include datei:

Code: [AUSKLAPPEN]

Dim Name$(11)
Dim Score(11)


Function highscore()
Repeat
Cls




; --- Liste laden 
Datei = ReadFile("Highscore.dat") 
Print
If Datei <> 0 Then ; Nur laden, wenn Liste auch vorhanden ist! 
For i = 1 To 10 
Name$(i) = ReadLine(Datei)   
Score(i) = ReadLine(Datei) 
Next 
CloseFile Datei 
EndIf




Text (1024/2),15,"Das ist die Liste aus dem Speicher:",True ;damit jeder bescheid weiß

 


; --- Liste anzeigen
For i = 1 To 10
Text (1024/2), i*20+50, i + "." + Name$(i) + " " + Score(i)
Next

; Ein neuer Eintrag wird geschrieben:

;Locate 100,200
;Print "Neuer Eintrag!"
;Print
;Locate 100,250
;Name$(11) = Input("Name: ")
;Locate 100,300
;Score(11) = Input("Punke: ")


WaitKey


; --- Liste sortieren
For I = 1 To 11
For J = I To 11
If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst
MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA
MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$
EndIf
Next
Next


; --- Liste erneut anzeigen
For i = 1 To 10
;Print i + "." + Name$(i) + " " + Score(i)
Text x+(1024/2), i*20+380, i + "." + Name$(i) + " " + Score(i)
Text (1024/2),310,"Das ist die Liste, mit dem neuen Namen und sortiert:",True
Next






WaitKey

; was passiert, nachdem die liste sortiert wurde:

;--- Liste speichern
Datei = WriteFile("Highscore.dat")
For i = 1 To 10
WriteLine Datei, Name$(i)
WriteLine Datei, Score(i)
Next
CloseFile Datei

WaitKey

;End

Flip
Forever

End Function



So, warum zeigt der am Ende meinen Namen nicht an, wenn ich gespielt habe?


Achja, eine Highscore.dat musst du halt eben machen, mit Punkten bis maximal 10, weil man nicht viel mehr bekommt!
~ Hey Ho Let's Go ~
 

dubitat

BeitragSo, März 28, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim Name$(11)


bedeutet das nicht das der die Felder Name von 0-10 erstellt?
Erare humanum est - Irren ist Menschlich
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
HILFE TRAVIS Smile
~ Hey Ho Let's Go ~

Hubsi

BeitragSo, März 28, 2004 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@dubitat: Das erstellt die Felder von 0 - 11, also 12 Felder Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Travis

BeitragSo, März 28, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ich das jetzt übersehen oder hast du deinen Punktestand vor dem Sortieren gar nicht an die Variable Score(11) übergeben. Dann kann der Eintrag auch nicht einsortiert werden, weil der Wert dann null ist und somit nicht in die Liste aufgenommen wird weil er ja niedriger ist als der kleinste vorhandene Wert der Liste.

Außerdem würde ich dir dringend raten deinen Codestil zu überarbeiten. Du solltest für das Laden, Seichern, Anzeigen und Sortieren lieber einzelne Funktionen einrichten, dann kannst du viel flexibler arbeiten und einzelne Vorgänge auch mehrmals aufrufen ohne MB weise Quellcode haben zu müssen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaub du hast recht travis nur, wie wird eigentlich der score erhöhT?

ich habe es so, und es geht nicht:

Code: [AUSKLAPPEN]

If KeyHit(28)
Score(i) = Score(i)  + 1
EndIf


so geht das nicht! Also, welche Variable ist eigentlich für den Score tzuständig, wie z.B für den Namen : 'Name$'

Achja, wenn man schriebt:

Code: [AUSKLAPPEN]

If KeyHit(28)
Score = Score  + 1
EndIf


Dann sagt BB ds man das nicht 'Score' nennen soll. (weil es später ja schon in gebrauch ist!)
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hilfe Rolling Eyes Rolling Eyes
~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sollte doch jetzt eigentlich klar sein. Deinen Punktestand musst du in Score(11) und den Namen in Name$(11) speichern. Genau diese beiden Werte werden dann in die Liste einsortiert. Du kannst natürlich auch jeden anderen Namen verwenden.

Ich Persönlich nehme immer den Variablenname 'Punkte' und übergebe ihn dan vor dem sortieren an Score(11).

In deinem Beispiel könntest du z.B. direkt Score(11) verwenden.

Code: [AUSKLAPPEN]

If KeyHit(28)
 Score(11) = Score(11)  + 1
EndIf


Ich möchte dir ja nicht zu nahe treten, aber langsam frage ich mich doch wofür du eigentlich eine Highscoreliste brauchst, wenn du mit solchen einfachen Dingen noch solche Probleme hast.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, ich bina uch verwirrrt!
Für name schriebe ich name$(11) und dann komm ich nicht darauf was ich für score nehmen muss Shocked Mad Twisted Evil
aber danke für die ganzen tipps travis! ich werd vielleicht noch 1 , 2 fragen haben, aber wenn mein kleines game fertig ist, kommst du als erstes in die credits! (das wird ein moorhuhn clon)
also, schau mal ab und zu noch hier vorbei
~ Hey Ho Let's Go ~

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group