Highscore

  • Ich tüftle schon an einer Woche an meinem Spiel um es immer weiter auszubauen. Und ich komm bei dieser Sache einfach nicht weiter:
    Wie man schon in der Überschrift erfährt geht es darum wie man eine Highscoreliste erstellt und immer am Ende des Spieles ausgibt. Ich hätte da an eine ini datei gedacht aber wie man die ausgibt hab ich noch nicht herrausgefunden. In die InI Datei wird die Variable $versuche eingetragen.

    Um Hilfe wird gebeten!

    Und wie heißt der befehl mit diesem @ wo dann bei drücken des Cancel Buttons das Programm beendet wird.

    Fals sich diese Fragen dumm anhören tut es mir leid, ich habe das letzte mal vor 2 Jahren mit Autoit Gearbeitet.

    Einmal editiert, zuletzt von Powercore (23. Juni 2011 um 19:57)

    • Offizieller Beitrag

    Hilfe unter IniWrite und IniRead nachlesen.

  • Vllt hilft dir auchnoch

    [autoit]

    _ArraySort()

    [/autoit]


    Damit du eine die besten oben hast. (guck dir dafür evtl den (2ten?) Parameter an)

  • Und wie heißt der befehl mit diesem @ wo dann bei drücken des Cancel Buttons das Programm beendet wird.


    Meinst du @error?

    [autoit]

    If @error Then Exit

    [/autoit]
  • und wo wird das eingebaut?

    [autoit]

    #include <Array.au3>
    MsgBox(0, "Die zahl liegt zwischen...!", "Die Zahl liegt zwischen 1 und 1000" ) ;<-- hinweis zwischen welchen zahlen die zahl liegt
    $versuche = 0
    $9 = Random(1,10,1)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    while 1
    $versuche += 1
    $1 = InputBox( "Zahlenraten", "Bitte geben sie eine Zahl ein!" )
    If $1 < $9 Then MsgBox(0,"Die Zahl ist leider Größer", "Die Zahl ist leider größer" )
    If $1 > $9 Then MsgBox(0, "Leider", "Leider ist die Zahl Tiefer" )
    If $1 = $9 Then ExitLoop
    WEnd

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Richtig!" , "Richtig! Du hast " & $versuche & " Versuche gebraucht!" )

    [/autoit]


    ist übrigens die Anfangsversion des Skriptes

    Einmal editiert, zuletzt von Powercore (23. Juni 2011 um 23:23)

  • Hier mal eine primitive Lösung per msgbox mit Array und Textdatei:

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $scorefile = @ScriptDir & "\score.txt"
    Global $aScore[1]=[0]

    [/autoit] [autoit][/autoit] [autoit]

    if FileExists($scorefile) = 0 Then _FileCreate($scorefile) ; legt Datei an falls noch keine existiert

    [/autoit] [autoit][/autoit] [autoit]

    ; Beispiel um Highscores zu schreiben und anzuzeigen
    for $i=1 to 3 ; drei zufällige highscores erstellen...
    $random = Random(1000,9999,1)
    SaveScore($random) ; speichert neuen highscore
    ShowScore(5) ; zeigt top5 an (absteigend sortiert)
    Next
    ShowScore(-1) ; komplette Highscoreliste mit arraydisplay

    [/autoit] [autoit][/autoit] [autoit]

    func SaveScore($newscore)
    _FileReadToArray($scorefile,$aScore) ; bestehende Datei in array einlesen
    _ArrayAdd($aScore, $newscore & @TAB & @TAB & InputBox("Neuer Highscore","Bitte Name angeben...")) ; highscore mit Name hinzufügen
    _ArrayDelete($aScore,0) ; Eintrag 0 von filereadtoarray löschen
    _ArraySort($aScore,1) ; array absteigend sortieren
    _FileWriteFromArray($scorefile,$aScore) ; array in Datei schreiben
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ShowScore($top)
    Local $scoremsgbox = "Punkte:" & @TAB & @TAB & "Name:" & @CRLF & @CRLF
    _FileReadToArray($scorefile,$aScore) ; bestehende Datei in array einlesen
    _ArrayDelete($aScore,0) ; Eintrag 0 von filereadtoarray löschen
    if $top = -1 Then return _ArrayDisplay($aScore,"Highscore - Komplett") ; Alternativ kann auch arraydisplay zur Ausgabe benutzt werden...
    if $top >= UBound($aScore) Then $top = UBound($aScore) ; notwendig, falls noch weniger Highscores existieren als angezeigt werden sollen

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 to $top-1
    $scoremsgbox &= $aScore[$i] & @CRLF ; erstellt einen String mit Zeilenumbrüchen für die msgbox Ausgabe
    Next
    MsgBox(0,"Highscore Top " & $top,$scoremsgbox) ; Ausgabe in msgbox
    EndFunc

    [/autoit]

    Schöner ist jedoch eine GUI mit listview. Auch hat meine obige Lösung wohl Probleme mit dem sortieren, wenn die Zahlenwerte nicht die selbe Anzahl an Stellen haben. Besser wäre es wohl ein 2-D Array zu verwenden.

    Einmal editiert, zuletzt von misterspeed (23. Juni 2011 um 23:24)