Name in Highscoreliste nur einmal

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Name in Highscoreliste nur einmal

    Hallo zusammen!

    Ich habe eine 0815-Highscoreliste, nur mit dem Unterschied das ich diese zu Beginn mit 10 Namen flute und in einem hübschen Menü anzeige, statt in dem Fenster. In meinem Spiel verwende ich Profile. Das Spiel speichert in jedem Level automatisch, der Spielstand ist mit einem festen Namen verbunden. Wenn man stirbt, erfolgt mit dem Namen automatisch ein Eintrag in der HS-Liste.

    Neben der HS-Liste wird der Wert noch in einer INI gespeichert. Dies mache ich, weil ich vor dem Eintrag den aktuellen Wert mit dem letzten HS-Eintrag abgleichen wollte. Ist der letzte Wert höher, erfolgt kein Eintrag. So weit, so gut.

    Wenn der neue Wert höher ist als der alte, habe ich den Namen doppelt in der Liste. Im schlimmsten Fall habe ich 10 mal den selben Namen drin stehen. Das soll aber nicht so sein. Er soll den alten Wert löschen und den neuen Wert an der richtigen Stelle eintragen. Die Frage ist jetzt: Wie stelle ich das an?

    Schon mal vielen Dank für Hilfe.
  • GML-Quellcode

    1. //Highscore Tabelle auslesen
    2. var name,list;
    3. for (i=0; i<=9; i+=1)
    4. {
    5. name = highscore_name(i+1)
    6. list[i,0] = name
    7. if name = */Profilname*/
    8. {
    9. list[i,1] = score
    10. }
    11. else
    12. {
    13. name = highscore_value(i+1)
    14. list[i,1] = name
    15. }
    16. }
    17. //Tabelle leeren
    18. highscore_clear()
    19. //Highscore Tabelle wieder füllen
    20. for (i=0; i<=9; i+=1)
    21. {
    22. highscore_add(list[i,1],list[i,0])
    23. }
    Alles anzeigen

    Ist ungetestet, funktioniert aber hoffentlich(mit for-Schleifen arbeite ich nicht so gern :whistling: )
  • GML-Quellcode

    1. var continue_,nick,place;
    2. place = 0
    3. continue_ = true
    4. while continue_ //Ich spiele mit dem ( while- ) Feuer, also beim Testen Priorität des Spieles auf niedrig stellen!
    5. {
    6. continue_ = false
    7. nick = get_string ( "Please enter your name" , "" ) //Das kriegste bestimmt noch schöner hin :P
    8. for ( i = 0 ; i < 10 , i += 1 )
    9. {
    10. if highscore_name ( i ) == nick
    11. {
    12. continue_ = true
    13. show_message ( "Name is already used" )
    14. break; //Bin mir hier nicht sicher - Löst break eig. nur eine Schleife oder alle, die gerade Laufen auf?
    15. }
    16. }
    17. for ( i = 0 ; i < 10 ; i += 1 )
    18. {
    19. if highscore_value ( i ) < score
    20. {
    21. place += 1
    22. }
    23. }
    24. highscore_add ( place , score )
    25. }
    Alles anzeigen

    Mein 2-Minuten-Versuch, keine Ahnung obs klappt :3
  • GML-Quellcode

    1. //Highscore Tabelle auslesen
    2. var name;
    3. for (i=0; i<=9; i+=1)
    4. {
    5. name = highscore_name(i+1)
    6. list[i,0] = name
    7. if name = profilename //Statt Profilname einfach die passende Variable rein
    8. {
    9. name = highscore_value(i+1)
    10. if name <= score {list[i,1] = score} else {list[i,1] = name}
    11. }
    12. else
    13. {
    14. name = highscore_value(i+1)
    15. list[i,1] = name
    16. }
    17. }
    18. //Tabelle leeren
    19. highscore_clear()
    20. //Highscore Tabelle wieder füllen
    21. for (i=0; i<=9; i+=1)
    22. {
    23. highscore_add(list[i,0],list[i,1])
    24. }
    Alles anzeigen

    Getestet und als funktionierend eingestuft. Der Fehler war dass ich highscore_add(list[i,0],list[i,1]) vertauscht hatte. Man kann halt keinen String als Score nehmen. :D
    Außerdem war im alten noch übelst ein Logikfehler drin: Es hat nicht geprüft ob die Punktzahl höher ist. :whistling:

    Hoffe das hilft. :thumbsup:
  • Ah sh*t. Hatte mich nur auf das Eintrag Problem konzentriert und es nicht mit ner leeren Tabelle getestet. :headtouch:

    GML-Quellcode

    1. //Highscore Tabelle auslesen
    2. var name;
    3. alreadyin = false
    4. for (i=0; i<=9; i+=1)
    5. {
    6. name = highscore_name(i+1)
    7. list[i,0] = name
    8. if name = global.profilname //Statt Profilname einfach die passende Variable rein
    9. {
    10. alreadyin = true
    11. name = highscore_value(i+1)
    12. if name <= score {list[i,1] = score} else {list[i,1] = name}
    13. }
    14. else
    15. {
    16. name = highscore_value(i+1)
    17. list[i,1] = name
    18. }
    19. }
    20. //Tabelle leeren
    21. highscore_clear()
    22. //Highscore Tabelle wieder füllen
    23. for (i=0; i<=9; i+=1)
    24. {
    25. highscore_add(list[i,0],list[i,1])
    26. }
    27. if alreadyin = false {highscore_add(global.profilname,score)}
    Alles anzeigen


    Sollte gehen. Hoffentlich der finale Code. :whistling:
  • Benutzer online 1

    1 Besucher