Yahtzee(Mega)

  • Hi th.meger,
    Meine Lieblingsliste süchtig machender Spiele:
    -Freecell
    -Yahtzee(Mega)[obwohl noch nicht ganz fehlerfrei]
    -Same
    -Columns
    -Moorhuhn
    Nachdem ich 'nur' noch Alien 12 und Alien 11 rausspielen muß, bin ich ziemlich sicher,
    daß die Straßenerkennung einen Fehler hat :D
    (Achso, mein max. ist 322)
    -Die Highscore-Liste würde ich sortiert in einem Array speichern..
    (dann ist es leichter, zu erkennen, ob der Spieler sich überhaupt eintragen muß/kann, so kann dann auch die nicht nötige Meldung verhindert werden)
    Sortieralgorithmen hat AutoIt eingebaut, QSort und BubbleSort habe ich hier gepostet(irgendwo)
    Das ist nur meine Meinung als Spieler, der Programmierer bist Du!
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    • Offizieller Beitrag

    Hi,

    super dass das Spiel dir so gut gefällt. Kannst du mir einen Screenshot schicken, falls du nochmal einen angeblichen Fehler in der Berechnung findest. Ich teste gerade seit 10 min., aber die Straßen werden immer korrekt berechnet. :evil:

    Die HS in ein Array speichern? Ist doch schon. Du meinst noch einfacher als

    If ControlGetText("", "", $point_PL) >= Int(StringMid($highScore_A[9], 1, 3))

    So long,

    Mega

  • Hier ein ScreenShot(KEIN Fake!!)
    Es ist ohne Probleme möglich, den angezeigten Wurf als 'Große Straße' abzuspeichern(In diesem Fall wäre es eher 'Steiniger Gebirgspfad')
    Zu dem Array-Problem bastel ich gerade eine anschauliche Darstellung..
    (Muttu noch was warten..)
    ..genuch gewartet..

    Code
    $fixDice1 = GUICtrlCreateMenuitem($language_A[61][1], $game)
    $fixDice2 = GUICtrlCreateMenuitem($language_A[62][1], $game)
    $fixDice3 = GUICtrlCreateMenuitem($language_A[63][1], $game)
    $fixDice4 = GUICtrlCreateMenuitem($language_A[64][1], $game)
    $fixDice5 = GUICtrlCreateMenuitem($language_A[65][1], $game)

    könnte so ausssehen:

    Code
    For $i=1 To 5
      $fixDice[$i] = GUICtrlCreateMenuitem($language_A[60+$i][1], $game)
    Next

    Es ergeben sich dann natürlich mindestens folgende Änderungen:

    Code
    Case $msg[0] = $fixDice[1] Or $msg[0] = $dice1_B And $msg[1] = $GUI
    			fixDice1()
    		Case ($msg[0] = $fixDice[2] Or $msg[0] = $dice2_B) And $msg[1] = $GUI
    			fixDice2()
    		Case ($msg[0] = $fixDice[3] Or $msg[0] = $dice3_B) And $msg[1] = $GUI
    			fixDice3()
    		Case ($msg[0] = $fixDice[4] Or $msg[0] = $dice4_B) And $msg[1] = $GUI
    			fixDice4()
    		Case ($msg[0] = $fixDice[5] Or $msg[0] = $dice5_B) And $msg[1] = $GUI
    			fixDice5()

    sowie

    Code
    Dim $Label_A[49] = ['', $defaultstatus, $options, $restart, $undo, $highScore, $exit, $view, $hide, $language, _
    			$languageChoice, $help, $aboutGUI, $game_G, $dices_G, $numbers_G, $specials_G, _
    			$rolls_G, $totalPoints_G, $ones_L, $twos_L, $threes_L, $fours_L, $fives_L, $sixes_L, $bonus_L, $threeOK_L, _
    			$fourOK_L, $fullHouse_L, $shortRun_L, $longRun_L, $yahtzee_L, $chance_L, $roll_B, $rollsLeft_DL, _
    			$points_DL, $question, $bonusPoints_PL, $highScoreList, $save_B, $exit_B, $statuslabel, $game, $fixDice[6], $rollDice]


    Interessant ist auch diese Überlegung:

    Würde eine Menge an Code sparen, inwieweit sich das durchführen läßt, hängt davon ab, wie
    weit ich mich in DEIN Spiel reinknie..
    Es ist nun mal so, wie Murphy sagt:"Ein Programm ist nie fertig"
    (Beweis: s. m$ :rofl2: )
    So, und jetz isses wieder ganz dein Programm :D
    Btw:
    Ich rede nur von dem Skript, das du hier gepostest hast. In diesem habe ich auch schon einige
    der genannten Änderungen vorgenommen, kann natürlich sein, daß in der Exe-Datei der Fehler
    nicht auftritt(isser nämlich eben beim Probieren natürlich nicht..)
    Das ist eben die Gefahr, wenn fremde Skripts einfach geändert werden:
    Man tut des Guten manchmal zuviel: überoptimiert :rofl2:
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    Einmal editiert, zuletzt von ytwinky (15. Juni 2006 um 11:53)

    • Offizieller Beitrag

    Hallo,

    in der Funktion highScoreGUI ist auch noch ein kleiner Fehler:

    Code
    If ControlGetText("", "", $point_PL) >= Int(StringMid($highScore_A[9], 1, 3)) And $finished = True Then

    Es wird nur überprüft ob die erreichte Punktzahl höher oder gleich der auf Platz 10 ist. Gespeichert werden aber 12 Plätze, wenn meine Punktzahl also besser ist als Platz 11 oder 12 aber schlechter als Platz 10 wird sie nicht berücksichtigt!

    besser wäre:

    Code
    If ControlGetText("", "", $point_PL) >= Int(StringMid($highScore_A[UBound($highScore_A)-1], 1, 3)) And $finished = True Then


    Der Fehler 'Steiniger Gebirgspfad' von ytwinky ist bei mir bisher noch nicht aufgetreten!

    • Offizieller Beitrag

    Ich habe soeben einen neuen Highscore erreicht: 332 :party4: :party3:

    • Offizieller Beitrag

    HI,

    vielen Dank für eure Anmerkungen. Den Fehler mit dem Vergleich mit Platz 10 anstatt 12 hatte ich direkt nach dem ich es gepostet hatte schon selbst gefunden. :tongue:

    Hmmh, manchmal ist die Frage, wie ich es schneller machen kann, meinetwegen kann der Code ruhig länger werden, hauptsache schnell. :D

    Die HighScore dauert solange, weil er viele Stringoperationen machen muss, außerdem ist die Verschlüsselung und Entschlüsselung ziemlich langsam.

    Die falsche Straßenbrechnung konnte ich bisher noch nicht nachvollziehen. Evtl. Muss ich mal einen Bot schreiben, der das spielt und überprüft.

    Macht weiter so Jungs. So macht es wirklich Spaß!

    Kudos!

    So long,

    Mega