Return | Es wird falsch Returnt | Kann den Denkfehler nicht finden

  • Hallo AutoIt-Community,

    ich mache gerade das Snake-Tutorial von Marsi. Habe das Script allerdings ein wenig umgeschrieben. Als ich das Script getestet habe (Es ist noch nicht fertig) ist mir ein Fehler aufgefallen.

    Folgendes:
    Ich habe eine Schwierigkeits-Wahl, diese wirkt sich auf die Geschwindigkeit der Snake-Schlange aus. Nur leider verändert sich die Geschwindigkeit nicht. Ich habe mich schon selber auf die Fehlersuche begeben und konnte die entsprechenden Zeilen auskommentieren.

    Ihr braucht also gar nicht großartig das ganze Script durchgehen, sondern einfach nur das anschauen was Kommentiert ist ^^
    Zudem habe ich MsgBoxen eingeaut, damit ihr seht was ich meine. Dazu müsst ihr allerdings das Script starten ^^

    Ich wäre euch zu tief's dankbar wenn ihr meinen Fehler findet. Ich werde wärend dessen weitersuchen, in der hoffnung das ich ihn finde ^^

    Hier das Script:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GDIPlus.au3>
    #include <GuiConstantsEx.au3>
    #Include <Misc.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    AutoItSetOption('GUICloseOnESC', 0)
    AutoItSetOption('GUIOnEventMode', 1)
    AutoItSetOption('MustDeclareVars', 1)

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

    Global Const $x_1 = 500
    Global Const $y_1 = 500

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

    Global $gui_1 = GUICreate('Snake', $x_1, $y_1)
    WinSetTrans($gui_1, '', 255)
    GUISetState(@SW_SHOW, $gui_1)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, '_exit', $gui_1)

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

    Global $modus_1 = 0
    Global $modus_2 = 0
    Local $schwierigkeit = 0

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

    _GDIPlus_Startup()
    Global $graphic_1 = _GDIPlus_GraphicsCreateFromHWND($gui_1)
    Global $bitmap_1 = _GDIPlus_BitmapCreateFromGraphics($y_1, $x_1, $graphic_1)
    Global $context_1 = _GDIPlus_ImageGetGraphicsContext($bitmap_1)
    Global $brush_1 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)

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

    GUIRegisterMsg(0x000F, '_zeichnen_spielfeld')

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

    _zeichnen_spielfeld()
    _hauptscript()

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

    Func _hauptscript()
    While Sleep(10)
    Switch $modus_1
    Case 0
    $schwierigkeit = _schwierigkeit() ;~ Hier liegt der Fehler, der Return Wert wird nicht abgespeichert.
    MsgBox(0, 'Nach der Eingabe', $schwierigkeit) ;~ MsgBox gibt $schwierigkeit aus. >> 0 Dieser Wert soll aber nicht kommen.
    $modus_1 = 1
    $modus_2 = 0
    Case 1
    _spiel()
    $modus_1 = 0
    EndSwitch
    WEnd
    EndFunc

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

    Func _exit()
    _GDIPlus_BrushDispose($brush_1)
    _GDIPlus_BitmapDispose($bitmap_1)
    _GDIPlus_GraphicsDispose($graphic_1)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    Func _schwierigkeit()
    _schwierigkeit_eingabe()
    EndFunc

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

    Func _spiel()
    Local $schritt = 25
    Local $snake[1][2]
    $snake[0][0] = Random(0, $x_1 /$schritt -1, 1)*$schritt
    $snake[0][1] = Random(0, $y_1 /$schritt -1, 1)*$schritt
    Local $richtung = Random(1, 4, 1)
    Local $links_1, $rechts_1, $oben_1, $unten_1, $links_2, $rechts_2, $oben_2, $unten_2
    Local $counter = 0
    While Sleep(10)
    $counter += 1
    $links_1 = _IsPressed(41)
    $rechts_1 = _IsPressed(44)
    $oben_1 = _IsPressed(57)
    $unten_1 = _IsPressed(53)
    $links_2 = _IsPressed(25)
    $rechts_2 = _IsPressed(27)
    $oben_2 = _IsPressed(26)
    $unten_2 = _IsPressed(28)
    If $links_1 = True Then $richtung = 1
    If $rechts_1 = True Then $richtung = 2
    If $oben_1 = True Then $richtung = 3
    If $unten_1 = True Then $richtung = 4
    If $links_2 = True Then $richtung = 1
    If $rechts_2 = True Then $richtung = 2
    If $oben_2 = True Then $richtung = 3
    If $unten_2 = True Then $richtung = 4
    If IsInt($counter /(10 -($schwierigkeit -1) *2)) Then
    $counter = 0
    _bewege_schlange($snake, $schritt, $richtung)
    _zeichne_schlange($snake, $schritt)
    EndIf
    WEnd
    EndFunc

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

    Func _schwierigkeit_eingabe()
    Local $gui_2 = GUICreate('', 200, 200, Default, Default, $WS_POPUP + $WS_BORDER)
    Local $label_1 = GUICtrlCreateLabel('Schwierigkeitswahl:', 50, 30, 100, 20, $SS_CENTER)
    Local $button_1 = GUICtrlCreateButton('Leicht', 50, 70, 100, 20)
    Local $button_2 = GUICtrlCreateButton('Mittel', 50, 100, 100, 20)
    Local $button_3 = GUICtrlCreateButton('Schwer', 50, 130, 100, 20)
    Local $button_4 = GUICtrlCreateButton('Exit', 10, 170, 50, 20)
    Local $button_5 = GUICtrlCreateButton('Hilfe', 140, 170, 50, 20)
    GUISetState(@SW_SHOW, $gui_2)
    GUICtrlSetOnEvent($button_1, '_leicht')
    GUICtrlSetOnEvent($button_2, '_mittel')
    GUICtrlSetOnEvent($button_3, '_schwer')
    GUICtrlSetOnEvent($button_4, '_exit')
    GUICtrlSetOnEvent($button_5, '_hilfe')
    WinSetOnTop($gui_2, '', 1)
    While $modus_2 = 0
    Sleep(10)
    WEnd
    WinSetOnTop($gui_2, '', 0)
    GUIDelete($gui_2)
    MsgBox(0, 'In der Eingabe', $modus_2) ;~ MsgBox gibt $modus_2 korrekt aus!
    Return $modus_2 ;~ Der Gedrückte Button wird Returnt. Wie man in der MsgBox darüber sehen kann, wurde $modus_2 korrekt umgesetzt. Returnt aber Falsch.
    EndFunc

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

    Func _leicht()
    $modus_2 = 1 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Leicht' gedrückt wurde.
    EndFunc

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

    Func _mittel()
    $modus_2 = 2 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Mittel' gedrückt wurde.
    EndFunc

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

    Func _schwer()
    $modus_2 = 3 ;~ Hier der Wert der ausgegeben werden soll, wenn der Button 'Schwer' gedrückt wurde.
    EndFunc

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

    Func _hilfe()
    EndFunc

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

    Func _zeichnen_spielfeld()
    _GDIPlus_GraphicsDrawImage($graphic_1, $bitmap_1, 0, 0)
    _GDIPlus_GraphicsClear($graphic_1, 0xFF000000)
    EndFunc

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

    Func _zeichne_schlange($snake, $schritt)
    Local $x_2, $y_2
    Local $laenge = UBound($snake, 1)
    For $count = 0 To $laenge -1
    $x_2 = $snake[$count][0]
    $y_2 = $snake[$count][1]
    _GDIPlus_GraphicsFillRect($graphic_1, $x_2, $y_2, $schritt, $schritt, $brush_1)
    Next
    EndFunc

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

    Func _bewege_schlange(ByRef $snake, $schritt, $richtung)
    Local $ubound = UBound($snake, 1)
    For $count = 0 To $ubound -1
    Switch $richtung
    Case 1
    $snake[$count][0] -= $schritt
    If $snake[$count][0] < 0 Then $snake[$count][0] = $x_1 -$schritt
    Case 2
    $snake[$count][0] += $schritt
    If $snake[$count][0] = $x_1 Then $snake[$count][0] = 0
    Case 3
    $snake[$count][1] -= $schritt
    If $snake[$count][1] < 0 Then $snake[$count][1] = $y_1 -$schritt
    Case 4
    $snake[$count][1] += $schritt
    If $snake[$count][1] = $y_1 Then $snake[$count][1] = 0
    EndSwitch
    Next
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Yjuq (17. Juli 2012 um 17:53)

  • [autoit]

    Func _schwierigkeit()
    _schwierigkeit_eingabe()
    EndFunc

    [/autoit]

    Die Funktion selbst muss doch was zurückgeben..
    Der _schwierigkeit() wird was zurückgegeben, sie selbst tut es aber nicht..

    • Offizieller Beitrag

    Warum ruft du _schwierigkeit_eingabe eigentlich nicht direkt auf?
    Die Func _schwierigkeit hat für mich keine Funktion, ausser eine weitere Funktion aufzurufen ;)