Zwischen Funktionen wechseln

  • Hey,
    ich habe ein Problem, wofür ich einfach keine Lösung finde. Ich werde den Source Code soweit es geht minimieren!

    Die Funktion menu() wird nach dem üblichen AutoIt Code (Variablen, GDI+ und so) aufgerufen:

    Spoiler anzeigen
    [autoit]

    Func menu()
    While Sleep(10)
    _GDIPlus_GraphicsClear($hGraphics, 0xff3D5E91)

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

    menuDraw()

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

    If WinActive($mainGUI) Then menuCheckInput()

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

    ; start game
    If $gameStarted = True Then ExitLoop

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

    _WinAPI_BitBlt($hDC, 0, 0, $iWidth, $iHeight, $hDC_Buffer, 0, 0, 0x00CC0020)
    WEnd
    firstTurn()
    EndFunc

    [/autoit]

    Über die Funktion menuCheckInput() wird dann die Tastatur abgefragt. Wenn z.B. Enter gedrückt wird, ist $gameStarted = True,
    d.h. die Schleife wird verlassen und die Funktion firstTurn() aufgerufen. Sonst wird das Menü dargestellt.

    Spoiler anzeigen
    [autoit]

    Func firstTurn()
    ; ... Variablen etc.
    ; dann:
    game()
    EndFunc

    [/autoit]

    In firstTurn() werden Variablen gesetzt, Timer gestartet etc., dann wird die Funktion des eigentlichen Spiels aufgerufen:

    Spoiler anzeigen
    [autoit]

    Func game()
    While Sleep(10)
    _GDIPlus_GraphicsClear($hGraphics, 0xffCFDBEC)

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

    Switch $gameState
    Case 0
    drawGame() ; hier wird das Spiel gezeichnet
    Case 1
    ExitLoop
    ; ...
    EndSwitch

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

    If WinActive($mainGUI) Then checkInput()

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

    _WinAPI_BitBlt($hDC, 0, 0, $iWidth, $iHeight, $hDC_Buffer, 0, 0, 0x00CC0020)
    WEnd
    msgbox(0, "", "zum menue") ; zu Testzwecken
    menu()
    EndFunc

    [/autoit]

    Wenn das Spiel vorbei ist, wird $gameState auf 1 gesetzt, womit die Schleife aus game() verlassen wird und es wieder ins Menü geht.

    Alles oben beschriebene funktioniert, aber leider nur ein Mal!

    Wenn ein Spiel beendet wurde, man dann also wieder im Menü ist, und man dann ein neues Spiel startet sprich Enter gedrückt wird, wird seltsamerweise - und ich kann es mir einfach nicht erklären warum - immer wieder die msgbox angezeigt (und das Spiel natürlich nicht gestartet).

    Ich hoffe, dass ich mein Problem einigermaßen verständlich erläutert habe und mir jemand helfen kann.

    Danke!

    Einmal editiert, zuletzt von pete_gzome (5. März 2012 um 18:05)

  • Okay das ist jetzt peinlich. Du hast vollkommen Recht, habe $gameState wieder auf 0 gesetzt und jetzt funktioniert es.

    Ich sitze seit an Tagen an dem Problem und bin darauf nicht gekommen :S

    Danke dir!