Habe einen Highscore erstellt, aber wie weiter?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Habe einen Highscore erstellt, aber wie weiter?

BeitragSa, März 27, 2004 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Habe folgendes Highscoregerüst gemacht:

Code: [AUSKLAPPEN]


; Highscore Gerüst
;#################

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



; Globale Daten , unter anderem auch der Input Befehl
Global timer
Locate 500,500
Global Name$ = Input("Name:")
Cls
Global Punkte

; ENtweder beginnt das Game oder Highscore wird gelesen:
Text 100,100,"Enter um das Game zu starten"
Text 100,150,"Leertaste um den Highscore zu sehen"

WaitKey

If KeyDown(57) Then highscore_lesen()

If KeyDown(28) Then ; hauptschleife befindet sich in if bedingung!
Repeat
Cls




timer = timer + 1

Text 10,10,"Timer:"+timer
Text 10,60,"Punkte:"+Punkte


If timer > 200
zeit_ende()
EndIf

If KeyHit(28)
Punkte = Punkte + 1
EndIf

If KeyDown(1) End

Flip
Forever

EndIf ;ende der hauptschleife

Function zeit_ende()


Cls



Datei = WriteFile ("Speicher2.dat")
WriteString Datei, Name$
WriteInt Datei, Level
WriteInt Datei, Leben
WriteInt Datei, Punkte
CloseFile Datei
 

Datei = ReadFile ("Speicher2.dat")
Name$ = ReadString$(Datei)
Level = ReadInt(Datei)
Leben = ReadInt(Datei)
Punkte = ReadInt(Datei)
CloseFile Datei

Text 500,100,"Highscore:"
Text 360,226,"Name:"
Text 460,226,"Level:"
Text 560,226,"Leben:"
Text 660,226,"Punkte:"

Text 305,260,""+ Name$
Text 470,260,""+ Level
Text 570,260,""+ Leben
Text 670,260,""+ Punkte




End Function 

Function highscore_lesen()
Repeat
Cls

Datei = ReadFile ("Speicher2.dat")
Name$ = ReadString$(Datei)
Level = ReadInt(Datei)
Leben = ReadInt(Datei)
Punkte = ReadInt(Datei)
CloseFile Datei

Text 500,100,"Highscore:"
Text 360,226,"Name:"
Text 460,226,"Level:"
Text 560,226,"Leben:"
Text 660,226,"Punkte:"

Text 305,260,""+ Name$
Text 470,260,""+ Level
Text 570,260,""+ Leben
Text 670,260,""+ Punkte

If KeyDown(1) End

Flip
Forever
End Function




Könnt ihr ja mal ausprobiern! ist ganz gut, nur nun stellt sich eine Frage:
Wie kann ich das nun bb beibringen, das da mehr leute auf eine liste passen, der die nach punkten sortiert und maximal 10 auf die liste kommen? Rolling Eyes
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 27, 2004 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau hier dir das mal an da steht soweit alles drinn....
https://www.blitzforum.de/viewtopic.php?t=766
[BB2D | BB3D | BB+]

Last Anquav Hero

BeitragSa, März 27, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Travis hat doch so einen schönen Kot ähh Code gemacht

nächstesmal benutz gefälligst die suche...

klickst du hier

oder schau im Kot ähh Code Archiv nach

edit: mist, zu langsam
 

Blitzkrieg Bop

BeitragSa, März 27, 2004 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Toll! das bringt ja nix, weil bei mir werden die NAmen ja nicht per Zufall bestimmt, sondern werden eingegeben.!!! wie mache ich das dann=
~ Hey Ho Let's Go ~
 

dubitat

BeitragSa, März 27, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
lol! das solltest du dir wohl denken können:
du lässt die zufallszahlen einfach weg und nimmst den string, wo der user was eingegeben hat und dann sollte es funken! sonst gib ein bissel cde und ich kann helfen!
Erare humanum est - Irren ist Menschlich
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
oh man! kann mir jemand das genau erklären, wie ich das machen kann? ich steig da nicht durch! BITTE
~ Hey Ho Let's Go ~

Last Anquav Hero

BeitragSo, März 28, 2004 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
was machen?
falls du das meinst:
Code: [AUSKLAPPEN]



maxhighscores=9 ;9, da 0 auch zählt
dim scores(500)
dim highscores(maxhighscores)

;sortier-algorithmus kommt hier hin
...

;maximal 10 scores
for i=0 to maxhighscores
 highscores(i)=scores(i)
next

oder das
Code: [AUSKLAPPEN]

; --- Liste mit Zufallswerten erstellen
Print "Unsortierte Liste:"
For i = 1 To 10
 Score(i) = Rnd(0,100): Name$(i) = "Spieler " + i
 Print i + "." + Name$(i) + "  " + Score(i)
Next

WaitKey

einfach weglassen!

fehlt dir was irgendwo, irgendwie?
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
muss ich das denn auf grundlage von dim feldern machen? und wie ganue mach ich das jetzt,m wenn man nach jder runde sienen namen eingibt und meistens andere punkte hat, die nach größe geordnet werden sollen
~ Hey Ho Let's Go ~

Last Anquav Hero

BeitragSo, März 28, 2004 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst gerne banks oder blitzarrays oder types verwenden, es steht dir offen...

nimm den quicksort algorithmus, ist alles in Travis Code...

Hubsi

BeitragSo, März 28, 2004 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
function HighSort(sollpunkte,name$)
  for a=5 to 0 step -1
    if sollpunkte>highpoints(a)
      highname$(a+1)=highname$(a)
      highpoints(a+1)=highpoints(a)
      highname$(a)=name$
      highpoints(a)=sollpunkte
    endif
  next
end function


Hab das mal eben rausgekramt, musst Dir halt noch auf Deine Bedürfnisse anpassen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Travis

BeitragSo, März 28, 2004 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann werde ich es noch mal versuchen Schritt für Schritt zu erklären.

Angenommen wir wollen eine Highscoreliste für 10 Punktestände erstellen. Dazu legen wir jetzt jeweils eine 11 stellige Liste für die Namen und auch für die Punkte an. Den 11. Platz benötigen wir später um neue Einträge in die Liste einzusortieren.

Code: [AUSKLAPPEN]

Dim Name$(11)
Dim Score(11)


Jetzt haben wir eine leere Liste. Wenn wir keine vorhandene Liste haben, die wir laden können, können wir die Liste jetzt mit Standartwerten füllen.

Code: [AUSKLAPPEN]

For i = 1 To 10
 Score(i) = i*10
 Name$(i) = "Spieler " + i
Next


Jetzt hätten wir etwa folgende Liste:

Code: [AUSKLAPPEN]

1. Spieler 1     10 Punkte
2. Spieler 2     20 Punkte
3. Spieler 3     30 Punkte
4. Spieler 4     40 Punkte
...


So ist die Liste natürlich unsortiert, denn der Spieler mit der höchsten Punktzahl muss natürich an erster Stelle stehen. Also müssen wir die Liste sortieren. Dazu kommt folgende 'Sortiermaschine' zum Einsatz.

Code: [AUSKLAPPEN]

For I = 1 To 10
 For J = I To 10
  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


Jetzt haben wir die korrekt sortierte Liste mit dem Größten Punktestand an erster Stelle. Hat jetzt ein Spieler einen höheren Punktestand erreicht als der niedrigste Punktestand in der Tabelle [Score(10)] dann darf der Spieler seinen Namen in die Liste eintragen.

Code: [AUSKLAPPEN]

If Punkte > Score(10) Then
 Print "Neuer Eintrag!"
 Print
 Name$(11) = Input("Name:  ")
 Score(11) = Input("Punke: ")
EndIf


Der Neue Eintrag wird zunächst hinter dem letzten platziert. Jetzt muss die komplette Liste mit allen 11 Einträgen noch einmal sortiert werden.

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$
  EndIf
 Next
Next


Jetzt haben wir den ehemals niedrigstan Punktestand auf dem unsichtbaren 11. Platz geschoben und der neue Punktestand wurde entsprechend in die Liste einsortiert.

Jetzt folgt noch ein Beispiel zum speichern und zum laden der Liste in eine externe Datei.

Code: [AUSKLAPPEN]

; --- Liste speichern
Datei = WriteFile("Highscore.dat")

For i = 1 To 10
 WriteLine Datei, Name$(i)
 WriteLine Datei, Score(i)
Next

CloseFile Datei



; --- Liste laden
Datei = ReadFile("Highscore.dat")

Print

For i = 1 To 10
 Name$(i) = ReadLine(Datei)
 Score(i) = ReadLine(Datei)
Next

CloseFile Datei



; --- Liste anzeigen
For i = 1 To 10
 Print i + "." + Name$(i) + "  " + Score(i)
Next


Ich hoffe, das war ausführlich genug 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 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
also was genau ist hier shcon nicht richtig:

Code: [AUSKLAPPEN]

Dim Name$(11)
Dim Score(11)


; --- Liste laden
Datei = ReadFile("Highscore.dat")
Print
For i = 1 To 10
Name$(i) = ReadLine(Datei)
Score(i) = ReadLine(Datei)
Next
CloseFile Datei

; --- Liste anzeigen
For i = 1 To 10
Print i + "." + Name$(i) + " " + Score(i)
Next
For i = 1 To 10
Score(i) = i*10
Name$(i) = "Spieler " + i
Next


For I = 1 To 10
For J = I To 10
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


If Punkte > Score(10) Then
Print "Neuer Eintrag!"
Print
Name$(11) = Input("Name: ")
Score(11) = Input("Punke: ")
EndIf



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




~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also du darfst die Liste nur dann laden, falls sie auch vorhanden ist (also falls die Datei existiert). Wenn nicht, musst du eine Standartliste erstellen.

Code: [AUSKLAPPEN]

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

If Datei = 0 Then ; Wenn keine Liste vorhanden ist, Standartliste erstellen!
 For i = 1 To 10
  Score(i) = i*10
  Name$(i) = "Spieler " + i
 Next
EndIf



; --- Liste anzeigen
For i = 1 To 10
 Print i + "." + Name$(i) + " " + Score(i)
Next


; --- Liste sortieren
For I = 1 To 10
 For J = I To 10
  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


;If Punkte > Score(10) Then ; muss weggelassen werden, da wir hier die Punkte ja direkt eingeben (Fehler von mir)
 Print "Neuer Eintrag!"
 Print
 Name$(11) = Input("Name: ")
 Score(11) = Input("Punke: ")
;EndIf


; --- Liste erneut 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)
Next

; Das hier musst du weglassen, weil du sonst die liste gleich wieder
; mit Standartwerten überschreibst  ;-)
;For i = 1 To 10
;Score(i) = i*10
;Name$(i) = "Spieler " + i
;Next


WaitKey
End
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 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
so travis! ich versuch da jetzt durchzusteigen und anzupassen! wäre nett, wenn du nachher nochmal schauen kannst, weil ich sicher ein paar fragen haben werde! aber danke erstmal Razz Laughing
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
wie zum Beispiel kann man anstatt:
Code: [AUSKLAPPEN]

Print i + "." + Name$(i) + " " + Score(i)


den befehlt 'Text' verwenden? wenn ic das versuche, überlappen si´ch alle spielernamen
~ Hey Ho Let's Go ~

Hubsi

BeitragSo, März 28, 2004 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Text x,y,"Text",[centerx],[centery]

Ich empfehle Dir die deutsche Onlinehilfe zu saugen. Arbeite auch Rob's Tut durch, dann bleibst Du nicht mehr an solchem Kinderkram hängen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragSo, März 28, 2004 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
lol! das habe ich längst getan, aber mit dem text befehl komm ich net so klar da irgendwie! naja, ich warte bis travis da ist , is ja schließlich sien code Smile
~ Hey Ho Let's Go ~

Travis

BeitragSo, März 28, 2004 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So, da bin ich wieder Very Happy

Also man könnte das so machen:

Code: [AUSKLAPPEN]

For i = 1 to 10
 Text x, i*10, i + "." + Name$(i) + " " + Score(i)
Next


Da der Zähler i ja immer um Eins erhöht wird, hat jetzt jede Zeile einen anderen Y-Wert.
www.funforge.org

Ich hasse WASD-Steuerung.

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

soli

BeitragSo, März 28, 2004 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@Travis
Das erste Sortieren(1-10) kannst du dir sparen.
wenn du das zweite Sortieren in eine Function packst,
und einfach aufrufst.
solitaire

Travis

BeitragSo, März 28, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Rolling Eyes Schon klar, gleiches gilt auch für das Laden, Speichern und das Anzeigen. So ist es aber erstmal übersichtlicher.
www.funforge.org

Ich hasse WASD-Steuerung.

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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group