Probleme mit meiner Highscore Liste?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Probleme mit meiner Highscore Liste?

BeitragMo, Jun 05, 2006 4:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
also ich hab mein Spiel Fertig mit Highsscore Liste und wenn man mehr Punkte erreicht hat wo momentan in der Highscore Liste sind, also:

If Punkte > Score(10) Then

EndIf

dann wird der Block zwar ausgeführt aber die Input Box wo man seinen Namen eingeben muss verschwindet gleich und dann kommt schon die Heighscore Liste.

Da is irgendwo ein Fehler oder so, wisst ihr vieleicht woran das liegen kann?
hier mal der Code wo man seinen Namen eingibt:

Code: [AUSKLAPPEN]
If HighscoreEingeben = 1 Then
    If Punkte > Score(10) Then
      Score(11) = Punkte
      Locate 100,100
      DeinName$ = Input$("Name eingeben: ")
      Name$(11) = LSet(DeinName$,15)
      Punkte = 0
      HighscoreSort()
      HighscoreSave()
      HighscoreView()
    EndIf

    If Punkte < Score(10) Then
      HighscoreView()
    EndIf
  EndIf


ich bin euch sehr dankbar wenn ihr mein Problem lösen könnt Wink

Gruss Andreas

x-pressive

BeitragMo, Jun 05, 2006 6:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man annimmt (was logisch wäre!), das Score(1) die höchste Punktzahl der Top Ten enthält und Score(10) den letzten Highscore-Platz, dann wäre das hier viel eleganter:

Code: [AUSKLAPPEN]
; NEUER HIGHSCORE?
For i = 1 To 10
   ; PLATZ IN DEN TOP TEN?
   If punkte >= scores(i) Then
      
      ; PLÄTZE DARUNTER NACH UNTEN VERSCHIEBEN
      For j = 10 To (i-1)
         scores(i) = scores(i-1)
         names (i) = names (i-1)
      Next
      
      ; DEN NEUEN PLATZ EINFÜGEN
      scores(i) = punkte
      names (i) = LSet( Input$("Name eingeben: ") ,15)
      HighscoreSave()
      
      Exit
   End If
Next

HighscoreView()


Damit sparst du dir auch HighscoreSort() -denn sortieren ist gar nicht nötig, wenn du gleich gezielt einfügst, wie hier.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Hubsi

BeitragMo, Jun 05, 2006 9:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast vielleicht vor dem Input eine Tastenabfrage drin, ala "Score eintragen? (Enter für Ja)" oder etwas in der Richtung eben? Vielleicht auch im Spiel die Enter-Taste (auch Zahlenblock) mit einer Funktion belegt? Für den Fall dürfte ein einfaches ql:FlushKeys() vor dem Input helfen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

bruce85

BeitragMo, Jun 05, 2006 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank, des mit FlushKey functioniert Very Happy

Gruss Andreas
 

bruce85

BeitragMo, Jun 05, 2006 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo nochmal,
die Highscore Punkte sind ja jetzt eingetragen aber die Highscore wird net gespeichert, wieso?

hier mal den Code für HighscoreSave:

Code: [AUSKLAPPEN]
Function HighscoreSave()

  Datei = WriteFile("Highscore.txt")

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

  CloseFile Datei

End Function


edit:

und hier wirds geladen:

Code: [AUSKLAPPEN]
Function HighscoreLoad()

  Datei = ReadFile("Highscore.txt")

  If Not Datei = 0 Then
    For i=1 To 10
      Name$(i) = ReadLine(Datei)
      Score(i) = ReadLine(Datei)
    Next
    CloseFile Datei
  EndIf

  If Datei = 0 Then
    For i=1 To 10
      Name$(i) = "Leer"
      Score(i) = i*99
    Next
  EndIf

End Function


und hier wird die Highscore angezeigt:

Code: [AUSKLAPPEN]
Function HighscoreView()
Repeat
  Cls

  DrawImage highscore,0,0

  SetFont schrift1
  Color 0,0,0
  For i=1 To 10
    If i < 10 Then Text 150,(i*22)+60,i+"."
    If i > 9 Then Text 142,(i*22)+60,i+"."
    Text 170,(i*22)+60,Name$(i)
    Text 300,(i*22)+60,Score(i)
  Next

  Flip
Until KeyHit(1)
End Function


edit:
des kann nur an If Datei = 0 Then liegen, weil des erneut wieder ausgeführt wird ob wohl die Datei schon existiert.

Danke schonmal Wink

Gruss Andreas
 

bruce85

BeitragMo, Jun 05, 2006 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
habs anders gelöst und jetzt funzt es, trotzdem danke Very Happy
 

bruce85

BeitragDi, Jun 06, 2006 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
noch eine Frage hätte ich,
und zwar wollte ich fragen welche Schleife ihr für die Highscore liste benutzt oder so, weil wenn ich eine höhere Punktzahl erreicht habe dann gebe ich mein Name ein für die Highscore und dann komm die Highscore Liste, und wenn ich auf ESC Drücke dann geht es wieder ins Spiel rein was net sein darf, es soll ja dann ins Hauptmenu reingehen, aber wie macht man das am besten?

ich habs so probiert:

Code: [AUSKLAPPEN]
Funcion HighscoreView()
Repeat
  Cls

  Code.....

  Flip
Until KeyHit(1) <> HauptMenu()
End Function


aber wenn ich dann auf die Highscore Liste klicke dann geht es anschließend wieder ins Hauptmenu rein wegen <> HauptMenu()

Habt ihr vieleicht eine ahnung wie man das macht?

Gruss Andreas
 

Dreamora

BeitragDi, Jun 06, 2006 9:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Am einfachsten einfach am ende des spieles die highscore liste aufrufen und wenn dieser aufruf wieder ins spiel zurück kommt, spiel beenden und anzeigen, was du anzeigen wolltest ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BladeRunner

Moderator

BeitragDi, Jun 06, 2006 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss ja nicht, wie Du dein Game aufgebaut hast, aber ich vermute mal du hast es in Functions zerlegt.
Ich unterstelle mal Hauptmenu(), Game() und HighscoreView().
Setze eine globale Variable STATE.
STATE sei 0 im Menu, 1 im Game und 2 in der Highscore, (3 für Ende).
Mache nun in der Schleife jeder Function eine Abfrage:
If STATE <> (nummer der Function) then return
Nun brauchst du noch ne Mainloop welche im Wesentlichen aus einem Select Case besteht:
Code: [AUSKLAPPEN]
repeat
    select STATE
        case 0 hauptmenu()
        case 1 game()
        case 2 Highscoreview()
        case 3 end
    end select
forever

Wenn der User nun Esc. in deiner Highscore Drückt, lässt Du einfach STATE auf 0 setzen.
Analoges vorgehen für die anderen Funktionen.
Um das Game zu beenden, setzt Du State auf 3.
Dieses Vorgehen lässt sich auf Beliebig viele Menüs und Submenüs erweitern.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

bruce85

BeitragDi, Jun 06, 2006 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ich danke dir, ich werds gleich mal ausprobieren, kann man das dann auch so machen: until keyhit(1) = STATE ??

Gruss Andreas

BladeRunner

Moderator

BeitragDi, Jun 06, 2006 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
nö, denn das hiesse ja "solange bis die Escapetaste = status" - ergibt keinen Sinn.
Keyhit(1) gibt dir ja 1 zurück sobald die Taste mit der Nummer 1 (sprich:escape) gedrückt wurde, und hat mit der STATE- Variable nichts zu tun.

Du kannst aber
Code: [AUSKLAPPEN]
if keyhit(1) then state = ...
machen, was dazu führt das beim Drücken der EscapeTaste eine Funktion deiner Wahl aufgerufen wird. Und die kann ja in jeder Funktion eine andere sein. Wenn Du noch eine zweite Variable einführst, die protokolliert von welcher Funktion Du in die aktuelle gekommen bist, dann kannst Du auch gezielt in Funktionen zurückspringen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

bruce85

BeitragDi, Jun 06, 2006 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist mir schon klar, ich habs ja schon ausprobiert damit until keyhit(1) = ........
damit gehts net, ich machs dann mit der if abfrage und danke dir für den Tip Very Happy

edit:
ich habs so gemacht ohne Select Case:

Code: [AUSKLAPPEN]
Function HighscoreView()
Repeat
  Cls

  ..........
  ..........

  If KeyHit(1) Then HauptMenu()

  Flip
Forever
End Function


olso die Repeat Forever Schleife und hab einfach ne if Abfrage gemacht das es halt wieder ins HauptMenu wechselt wenn man die ESC Taste gedrückt hat und es funktioniert auch, danke trotzdem für die hilfe Very Happy

Gruss Andreas

BladeRunner

Moderator

BeitragDi, Jun 06, 2006 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht auch, aber: Du verschachtelst zunehmend Funktionen ineinander was bei häufigem Wechseln zu einem Riesenoverhead und sogar zu einem Absturz führen kann.
Besser ist es das ausserhalb zu erledigen und die Funktionen mit return zu verlassen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

bruce85

BeitragMi, Jun 07, 2006 2:34
Antworten mit Zitat
Benutzer-Profile anzeigen
naja also bei mir is ja noch bis jetzt kein absturz oder fehler aufgetreten, alles funktioniert einwandfrei, aber ich werde mein Spiel Heute oder Morgen mal Vorstellen bei Projekte, um Fehlermeldungen oder so auszuschließen.
und trotzdem danke dir Wink

Gruss Andreas

x-pressive

BeitragMi, Jun 07, 2006 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@bruce85: du solltest auch mal ein paar Ratschläge annehmen und beherzigen, und nicht einfach nur stur das gelten lassen, was sich mit deiner Erfahrung als Anfänger deckt.

Das von Bladerunner angesprochene Problem tritt schneller auf, als du denkst -und die Fehlersuche ist dann alles andere als einfach. Besser, du gewöhnst dir von Anfang an einen sauberen Stil an, nicht erst, wenn es zu spät ist.

Wenn wir dir Tipps geben, machen wir das doch nicht zum Spass. Das hat schon seinen Grund.

Nach Lao Tse gibt es drei Arten zu lernen: 1. Durch Nachahmung, 2. durch weise Voraussicht und 3. durch schmerzliche Erfahrung. Wer sich nichts sagen lässt, hat sich für den dritten Weg entschieden. Na dann, viel Spaß Confused
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

bruce85

BeitragDo, Jun 08, 2006 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
nur mal so, ich bin kein Anfänger mehr Laughing

wo ich des so gemacht habe wie Blade Runner geschrieben hat dann ist der ganze Bildschirm Schwarz, man sieht dann garnichs mehr, so wie ich des jetzt gemacht habe funktioniert es ohne Probleme Wink

x-pressive

BeitragDo, Jun 08, 2006 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst doch nicht einfach BladeRunner die Schuld geben, wenn du seinen Vorschlag nicht richtig umsetzen kannst Confused Egal, mach's wie es dich glücklich macht. Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

bruce85

BeitragDo, Jun 08, 2006 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
sagmal habe ich den die Schuld gegeben?
ich machs ja einfach dann wie ich es kann, Twisted Evil

BladeRunner

Moderator

BeitragDo, Jun 08, 2006 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer seine Augen nicht zum sehen nutzt, wird sie zum weinen nutzen.
Thema erledigt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group