Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 19:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Stack Overflow

Discussion on Stack Overflow within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2015
Posts: 2
Received Thanks: 0
Question Stack Overflow

Hallo,
ich programmiere gerade Tic Tac Toe mit GUI und einer random KI. Leider kommt bei mir immer
Recursion level has been exceeded - AutoIt will quit to prevent stack overflow
ich weiß, dass das ist weil sich die Funktion so oft aufgerufen hat. Ich sehe aber keine Lösung. Könntet ihr mir vielleicht sagen, was an meinem Programm falsch ist?

Code:
;TIC TAC TOE;
#include<GUIConstantsEx.au3>
Global $aSpielfeldbutton
Global $Check1 = 0
Global $Check2 = 0
Global $Check3 = 0
Global $Check4 = 0
Global $Check5 = 0
Global $Check6 = 0
Global $Check7 = 0
Global $Check8 = 0
Global $Check9 = 0
Global $KiZug = 0
Global $GewonnenEinzel = 0
$Spieler = 1
$Gewonnen = 0
Global $Ki = 0
Opt("GUIOnEventMode",1)
$GUIMenu = GUICreate("Tic Tac Toe - Hauptmenü", 600,600,-1,-1)  ;Menü wird erstellt;
GUISetBkColor(0xffc125) ;GUI Hintergrundfarbe;
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$SpielenCtrl = GUICtrlCreateButton( "Spielen", 100,100, 400,50) ;Spielen-Button wird erstellt;
GUICtrlSetOnEvent( -1, "_Spielen")
GUICtrlSetFont(-1, 20)
GUICtrlSetBkColor(-1, 0x668B8B)
$OptionCtrl = GUICtrlCreateButton("Einstellungen", 100,300, 400, 50) ;Optionen-Button wird erstellt;
GUICtrlSetFont(-1, 10) ;Profil des Optionenbuttons;
GUICtrlSetBkColor($OptionCtrl, 0x32CD32)
$Credits = GUICtrlCreateButton ("Credits", 200,500, 200,50)
GUICtrlSetBkColor(-1, 0x9FF234)
GUICtrlSetOnEvent(-1, "_Credits")
$Einzelspieler = GUICtrlCreateButton ("Einzelspieler", 100,200,400,50)    ;Einzelspieler;
GUICtrlSetBkColor(-1, 0x3445FF)
GUICtrlSetFont(-1, 20)
GUICtrlSetOnEvent($Einzelspieler, "_Einzelspieler")
$GUIOptions = GUICreate( "TIC TAC TOE - Options", 600,600,-1,-1) ;GUI für die Optionen wird erstellt;
GUISetBkColor( 0x5F5B5B, $GUIOptions)
$OptionsAudio = GUICtrlCreateButton( "Audio", 100,200,400,50) ;Audio Button wird erstellt;
GUICtrlSetBKColor(-1, 0x86CF5F)
GUICtrlSetFont(-1, 20,400)
GUISetOnEvent($GUI_Event_Close, "_ExitOption")
GUICtrlSetOnEvent( $OptionCtrl, "_Option")
GUICtrlSetOnEvent($OptionsAudio, "_Audio")
$Einzelspieler = GUICreate("Tic Tac Toe", 500,300,-1,-1)                ;Spiele Buttons + Exit Buttons werden erstellt Einzelspieler;
Global $ButtonE1 = GUICtrlCreateButton( " ", 0,0, 100,100)
Global $ButtonE2 = GUICtrlCreateButton( "", 100,100, 100,100)
Global $ButtonE3 = GUICtrlCreateButton( "", 100,200, 100,100)
Global $ButtonE4 = GUICtrlCreateButton( "", 200,200, 100,100)
Global $ButtonE5 = GUICtrlCreateButton( "", 200,100, 100,100)
Global $ButtonE6 = GUICtrlCreateButton( "", 0,100, 100,100)
Global $ButtonE7 = GUICtrlCreateButton( "", 0,200, 100,100)
Global $ButtonE8 = GUICtrlCreateButton( "", 100,0, 100,100)
Global $ButtonE9 = GUICtrlCreateButton( "", 200,0, 100,100)
Global $ExitSpiel = GUICtrlCreateButton( "Exit", 400,100,50,50)
    GUICtrlSetOnEvent($ExitSpiel, "_ExitSp")
    GUICtrlSetOnEvent($ButtonE1, "checkE1")
    GUICtrlSetOnEvent($ButtonE2, "checkE2")
    GUICtrlSetOnEvent($ButtonE3, "checkE3")
    GUICtrlSetOnEvent($ButtonE4, "checkE4")
    GUICtrlSetOnEvent($ButtonE5, "checkE5")
    GUICtrlSetOnEvent($ButtonE6, "checkE6")
    GUICtrlSetOnEvent($ButtonE7, "checkE7")
    GUICtrlSetOnEvent($ButtonE8, "checkE8")
    GUICtrlSetOnEvent($ButtonE9, "checkE9")
	$Spielen = GUICreate("Tic Tac Toe", 500,300,-1,-1)                ;Spiele Buttons + Exit Buttons werden erstellt;
    $Button1 = GUICtrlCreateButton( " ", 0,0, 100,100)
    $Button2 = GUICtrlCreateButton( "", 100,100, 100,100)
    $Button3 = GUICtrlCreateButton( "", 100,200, 100,100)
    $Button4 = GUICtrlCreateButton( "", 200,200, 100,100)
    $Button5 = GUICtrlCreateButton( "", 200,100, 100,100)
    $Button6 = GUICtrlCreateButton( "", 0,100, 100,100)
    $Button7 = GUICtrlCreateButton( "", 0,200, 100,100)
    $Button8 = GUICtrlCreateButton( "", 100,0, 100,100)
    $Button9 = GUICtrlCreateButton( "", 200,0, 100,100)
    $ExitSpiel = GUICtrlCreateButton( "Exit", 400,100,50,50)
    GUICtrlSetOnEvent($ExitSpiel, "_ExitSp")
    GUICtrlSetOnEvent($Button1, "check1")
    GUICtrlSetOnEvent($Button2, "check2")
    GUICtrlSetOnEvent($Button3, "check3")
    GUICtrlSetOnEvent($Button4, "check4")
    GUICtrlSetOnEvent($Button5, "check5")
    GUICtrlSetOnEvent($Button6, "check6")
    GUICtrlSetOnEvent($Button7, "check7")
    GUICtrlSetOnEvent($Button8, "check8")
    GUICtrlSetOnEvent($Button9, "check9")
Global $Win1 = GUICtrlRead($Button1)
Global $Win2 = GUICtrlRead($Button2)
Global $Win3 = GUICtrlRead($Button3)
Global $Win4 = GUICtrlRead($Button4)
Global $Win5 = GUICtrlRead($Button5)
Global $Win6 = GUICtrlRead($Button6)
Global $Win7 = GUICtrlRead($Button7)
Global $Win8 = GUICtrlRead($Button8)
Global $Win9 = GUICtrlRead($Button9)
Global $WinE1 = GUICtrlRead($ButtonE1)
Global $WinE2 = GUICtrlRead($ButtonE2)
Global $WinE3 = GUICtrlRead($ButtonE3)
Global $WinE4 = GUICtrlRead($ButtonE4)
Global $WinE5 = GUICtrlRead($ButtonE5)
Global $WinE6 = GUICtrlRead($ButtonE6)
Global $WinE7 = GUICtrlRead($ButtonE7)
Global $WinE8 = GUICtrlRead($ButtonE8)
Global $WinE9 = GUICtrlRead($ButtonE9)
Func _Credits()
$Credits = GUICreate("Credits", 600,600, -1, -1)                        ;Credits werden erstellt;
$CreditCtrl = GUICtrlCreateLabel("Programmiert von: ", 100,100, 200,200)
$CreditCtrl1 = GUICtrlCreateLabel("Luca Werth ", 100,175, 400,200)
$CreditCtrl2 = GUICtrlCreateLabel("Leon Fath ", 100,250, 400,200)
$CreditCtrl3 = GUICtrlCreateLabel("Jesse Haferkamp ", 100,325,400,200)
$CreditCtrl4 = GUICtrlCreateLabel("Jonas Hermsen", 100,400, 400,200)
GUICtrlSetFont($CreditCtrl, 20)
GUICtrlSetFont($CreditCtrl1, 20)
GUICtrlSetFont($CreditCtrl2, 20)
GUICtrlSetFont($CreditCtrl3, 20)
GUICtrlSetFont($CreditCtrl4, 20)
GUISetState(@SW_SHOW, $Credits)
GUISetOnEvent($GUI_EVENT_CLOSE, "_HideCredits")
EndFunc
Global $SpielerE1 = 0
Func _Einzelspieler()
   $Ki = 0
   $Spieler = 1
   GUISetState(@SW_SHOW, $Einzelspieler)
   $SpielerE1 = InputBox("Spielername", "Gib deinen Namen an: ", "Name")
   EndFunc
Func _HideCredits() ;Funktion um Credits zu verstecken;
    GUISetState(@SW_HIDE, $Credits)
EndFunc
func _Exit() ;Funktion zum beenden des Programms;
   Exit
EndFunc
func _Option()  ;Funktion für den Options Button;
   GUISwitch($GUIOptions)
   GUISetState()
EndFunc
Func _Audio()                ;Funktion für die Audioeinstellungen;
   $SoundMenge = InputBox("Audioeinstellung", "Lautstärke (in % zwischen 0 und 100)", "Hier eingeben") ;Soundeinstellungen;
   If $SoundMenge < 100 And $SoundMenge > 0 Then
        SoundSetWaveVolume($SoundMenge)
        MsgBox(0, "Sound wurde geändert", "Sound wurde auf " &$SoundMenge &"% geändert")
     Else
        MsgBox(0, "Falsche Eingabe", "Nicht in Bereich des Möglichen")
   EndIf
EndFunc
Func _ExitOption()    ;Funktionen zum Beenden der Optionen;
   GUISetState(@SW_HIDE, $GUIOptions)
EndFunc
Func _Spielen()        ;Funktion für´s spielen;
    $Punktstand1 = 0
    $Punktstand2 = 0
    Global $Spieler1 = ""
    Global $Spieler2 = ""
    GUISetState(@SW_SHOW,$Spielen)
    GUISetState(@SW_HIDE, $GUIMenu)
    $Spieler1 = InputBox("Spieler 1", "Geben sie den Namen von Spieler 1 an", "Spieler 1")
    $Spieler2 = InputBox("Spieler 2", "Geben sie den Namen von Spieler 2 an", "Spieler 2")
 EndFunc
Func check1()                ;Funktionen für die einzelnen Spielebuttons;
    $check1 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button1, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button1, "O")
        $Spieler = 1
    EndIf
    $Win1 = GUICtrlRead($Button1)
    Gewonnen()
 EndFunc
Func check2()
    $check2 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button2, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button2, "O")
        $Spieler = 1
    EndIf
$Win2 = GUICtrlRead($Button2)
Gewonnen()
EndFunc
Func check3()
    $check3 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button3, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button3, "O")
        $Spieler = 1
    EndIf
$Win3 = GUICtrlRead($Button3)
Gewonnen()
EndFunc
Func check4()
    $check4 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button4, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button4, "O")
        $Spieler = 1
    EndIf
$Win4 = GUICtrlRead($Button4)
Gewonnen()
EndFunc
Func check5()
    $check5 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button5, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button5, "O")
        $Spieler = 1
    EndIf
    $Win5 = GUICtrlRead($Button5)
    Gewonnen()
EndFunc
Func check6()
    $check6 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button6, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button6, "O")
        $Spieler = 1
    EndIf
$Win6 = GUICtrlRead($Button6)
Gewonnen()
EndFunc
Func check7()
    $check7 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button7, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button7, "O")
        $Spieler = 1
    EndIf
$Win7 = GUICtrlRead($Button7)
Gewonnen()
EndFunc
Func check8()
    $check8 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button8, "X")
        $Spieler = 2
    Else
        GUICtrlSetData($Button8, "O")
        $Spieler = 1
    EndIf
$Win8 = GUICtrlRead($Button8)
Gewonnen()
EndFunc
Func check9()
    $check9 = 1
    If $Spieler = 1 Then
        GUICtrlSetData($Button9, "X")
        $Spieler = 2
        $KiZug = 1
    Else
        GUICtrlSetData($Button9, "O")
        $Spieler = 1
    EndIf
$Win9 = GUICtrlRead($Button9)
Gewonnen()
EndFunc



Func checkE1()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE1, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE1 = GUICtrlRead($ButtonE1)
    $ButtonFrei1 = GUICtrlRead($ButtonE1)
    GewonnenEinzel()
      _KiZug()
 EndFunc

 Func checkE2()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE2, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE2 = GUICtrlRead($ButtonE2)
    $ButtonFrei2 = GUICtrlRead($ButtonE2)
    GewonnenEinzel()
      _KiZug()
 EndFunc

 Func checkE3()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE3, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE3 = GUICtrlRead($ButtonE3)
    $ButtonFrei3 = GUICtrlRead($ButtonE3)
    GewonnenEinzel()
   _KiZug()
 EndFunc

 Func checkE4()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE4, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE4 = GUICtrlRead($ButtonE4)
    $ButtonFrei4 = GUICtrlRead($ButtonE4)
    GewonnenEinzel()
   _KiZug()
 EndFunc

 Func checkE5()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE5, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE5 = GUICtrlRead($ButtonE5)
    $ButtonFrei5 = GUICtrlRead($ButtonE5)
    GewonnenEinzel()
   _KiZug()
 EndFunc

 Func checkE6()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE6, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE6 = GUICtrlRead($ButtonE6)
    $ButtonFrei6 = GUICtrlRead($ButtonE6)
    GewonnenEinzel()
   _KiZug()
 EndFunc

 Func checkE7()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE7, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE7 = GUICtrlRead($ButtonE7)
    $ButtonFrei7 = GUICtrlRead($ButtonE7)
    Gewonnen()
      _KiZug()
 EndFunc

 Func checkE8()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE8, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE8 = GUICtrlRead($ButtonE8)
    $ButtonFrei8 = GUICtrlRead($ButtonE8)
    GewonnenEinzel()
      _KiZug()
 EndFunc

 Func checkE9()                ;Funktionen für die einzelnen Spielebuttons checkE1 = checkEinzelspieler 1;
    If $Spieler = 1 Then
        GUICtrlSetData($ButtonE9, "X")
        $Ki = 2
        $Spieler = 0
     EndIf
    $WinE9 = GUICtrlRead($ButtonE9)
    $ButtonFrei9 = GUICtrlRead($ButtonE9)
    GewonnenEinzel()
      _KiZug()
 EndFunc

Global $ButtonFrei1 = GUICtrlRead($ButtonE1)
Global $ButtonFrei2 = GUICtrlRead($ButtonE2)
Global $ButtonFrei3 = GUICtrlRead($ButtonE3)
Global $ButtonFrei4 = GUICtrlRead($ButtonE4)
Global $ButtonFrei5 = GUICtrlRead($ButtonE5)
Global $ButtonFrei6 = GUICtrlRead($ButtonE6)
Global $ButtonFrei7 = GUICtrlRead($ButtonE7)
Global $ButtonFrei8 = GUICtrlRead($ButtonE8)
Global $ButtonFrei9 = GUICtrlRead($ButtonE9)

 Func _KiZug()
    $KiZahl = random(1,9,1)
    Select
    Case $KiZahl == 1  And $ButtonFrei1 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE1, "O")
        $ButtonFrei1 = GUICtrlRead($ButtonE1)
       $WinE1 = 1
       $Spieler = 1
    Case $KiZahl == 2 And $ButtonFrei2 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE2, "O")
        $ButtonFrei2 = GUICtrlRead($ButtonE2)
       $WinE2 = 1
       $Spieler = 1
    Case $KiZahl == 3 And $ButtonFrei3 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE3, "O")
       $ButtonFrei3 = GUICtrlRead($ButtonE3)
       $WinE3 = 1
       $Spieler = 1
    Case $KiZahl == 4 And $ButtonFrei4 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE4, "O")
       $ButtonFrei4 = GUICtrlRead($ButtonE4)
       $WinE4 = 1
       $Spieler = 1
    Case $KiZahl == 5 And $ButtonFrei5 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE5, "O")
       $ButtonFrei5 = GUICtrlRead($ButtonE5)
       $WinE5 = 1
       $Spieler = 1
    Case $KiZahl == 6 And $ButtonFrei6 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE6, "O")
       $ButtonFrei6 = GUICtrlRead($ButtonE6)
       $Spieler = 1
       $WinE6 = 1
    Case $KiZahl == 7 And $ButtonFrei7 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE7, "O")
        $ButtonFrei7 = GUICtrlRead($ButtonE7)
       $WinE7 = 1
       $Spieler = 1
    Case $KiZahl == 8 And $ButtonFrei8 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE8, "O")
       $ButtonFrei8 = GUICtrlRead($ButtonE8)
       $WinE8 = 1
       $Spieler = 1
    Case $KiZahl == 9 And $ButtonFrei9 == ""
       Sleep(500)
       $ButtonFrei9 = GUICtrlRead($ButtonE9)
       GUICtrlSetData($ButtonE9, "O")
       $WinE9 = 1
       $Spieler = 1
	Case Else
       _KiZug()
	EndSelect
EndFunc

Func _ExitSp()    ;Man geht aus dem Mehrspieler raus;
    GUISetState(@SW_HIDE, $Spielen)
    GUISetState(@SW_HIDE, $Einzelspieler)
    GUISetState(@SW_Show, $GUIMenu)
    _reset()
EndFunc

 Func _reset()    ;Spielfeld wird zurückgesetzt;
    GUICtrlSetData($Button1, "")
    GUICtrlSetData($Button2, "")
    GUICtrlSetData($Button3, "")
    GUICtrlSetData($Button4, "")
    GUICtrlSetData($Button5, "")
    GUICtrlSetData($Button6, "")
    GUICtrlSetData($Button7, "")
    GUICtrlSetData($Button8, "")
    GUICtrlSetData($Button9, "")
    $Win1 = 0
    $Win2 = 0
    $Win3 = 0
    $Win4 = 0
    $Win5 = 0
    $Win6 = 0
    $Win7 = 0
    $Win8 = 0
    $Win9 = 0
	GUICtrlSetData($ButtonE1, "")
    GUICtrlSetData($ButtonE2, "")
    GUICtrlSetData($ButtonE3, "")
    GUICtrlSetData($ButtonE4, "")
    GUICtrlSetData($ButtonE5, "")
    GUICtrlSetData($ButtonE6, "")
    GUICtrlSetData($ButtonE7, "")
    GUICtrlSetData($ButtonE8, "")
    GUICtrlSetData($ButtonE9, "")
    $WinE1 = 0
    $WinE2 = 0
    $WinE3 = 0
    $WinE4 = 0
    $WinE5 = 0
    $WinE6 = 0
    $WinE7 = 0
    $WinE8 = 0
    $WinE9 = 0
    $SpielerE1 = 1
 EndFunc
Func GewonnenEinzel()            ;Funktion zum Überprüfen wer/ob jemand gewonnen hat;
 Select
     Case  $WinE1 == "X" And $WinE2 == "X" And $WinE4 == "X"
    MsgBox(0, "Spiel zuende1" ,"Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
 Case $WinE9 == "X" And $WinE2 == "X" And $WinE7 == "X"
      MsgBox(0, "Spiel zuende", "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
 Case $WinE1 == "X" And $WinE6 == "X" And $WinE7 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE1 == "X" And $WinE8 == "X" And $WinE9 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE9 == "X" And $WinE5 == "X" And $WinE4 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE7 == "X" And $WinE3 == "X" And $WinE4 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE8 == "X" And $WinE2 == "X" And $WinE3 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE6 == "X" And $WinE2 == "X" And $WinE5 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$SpielerE1)
	$GewonnenEinzel = 1
    _reset()
Case $WinE1 == "O" And $WinE2 == "O" And $WinE4 == "O"
    MsgBox(0, "Spiel zuende" ,"Spiel zuende")
    MsgBox(0, "SPieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE9 == "O" And $WinE2 == "O" And $WinE7 == "O"
    MsgBox(0, "Spiel zuende", "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE1 == "O" And $WinE6 == "O" And $WinE7 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE1 == "O" And $WinE8 == "O" And $WinE9 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE9 == "O" And $WinE5 == "O" And $WinE4 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE7 == "O" And $WinE3 == "O" And $WinE4 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE8 == "O" And $WinE2 == "O" And $WinE3 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
Case $WinE6 == "O" And $WinE2 == "O" And $WinE5 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &"Computer")
	$GewonnenEinzel = 1
    _reset()
 Case Else
    If $WinE1 == "O" or $WinE1 == "X" Then                ;Im Falle eines Unentschiedens;
       If $WinE2 == "O" or $WinE2 == "X" Then
          If $WinE3 == "O" or $WinE3 == "X" Then
             If $WinE4 == "O" or $WinE4 == "X" Then
                If $WinE5 == "O" or $WinE5 == "X" Then
                   If $WinE6 == "O" or $WinE6 == "X" Then
                      If $WinE7 == "O" or $WinE7 == "X" Then
                         If $WinE8 == "O" or $WinE8 == "X" Then
                            If $WinE9 == "O" or $WinE9 == "X" Then
                               MsgBox(0, "Ende", "Spiel ist zu Ende")
                               MsgBox(0, "Unentschieden", "Es gibt keinen Gewinner!")
                               _reset()
                            EndIf
                         EndIf
                      EndIf
                   EndIf
                EndIf
             EndIf
          EndIf
       EndIf
    EndIf
 EndSelect
EndFunc

Func Gewonnen()            ;Funktion zum Überprüfen wer/ob jemand gewonnen hat;
 Select
     Case  $Win1 == "X" And $Win2 == "X" And $Win4 == "X"
    MsgBox(0, "Spiel zuende1" ,"Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
 Case $Win9 == "X" And $Win2 == "X" And $Win7 == "X"
      MsgBox(0, "Spiel zuende", "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
 Case $Win1 == "X" And $Win6 == "X" And $Win7 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win1 == "X" And $Win8 == "X" And $Win9 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win9 == "X" And $Win5 == "X" And $Win4 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win7 == "X" And $Win3 == "X" And $Win4 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win8 == "X" And $Win2 == "X" And $Win3 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win6 == "X" And $Win2 == "X" And $Win5 == "X"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler X", "Gewonnen hat: " &$Spieler1)
    _reset()
Case $Win1 == "O" And $Win2 == "O" And $Win4 == "O"
    MsgBox(0, "Spiel zuende" ,"Spiel zuende")
    MsgBox(0, "SPieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win9 == "O" And $Win2 == "O" And $Win7 == "O"
    MsgBox(0, "Spiel zuende", "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win1 == "O" And $Win6 == "O" And $Win7 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win1 == "O" And $Win8 == "O" And $Win9 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win9 == "O" And $Win5 == "O" And $Win4 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win7 == "O" And $Win3 == "O" And $Win4 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win8 == "O" And $Win2 == "O" And $Win3 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
Case $Win6 == "O" And $Win2 == "O" And $Win5 == "O"
    MsgBox(0, "Spiel zuende" , "Spiel zuende")
    MsgBox(0, "Spieler O", "Gewonnen hat: " &$Spieler2)
    _reset()
 Case Else
    If $Win1 == "O" or $Win1 == "X" Then                ;Im Falle eines Unentschiedens;
       If $Win2 == "O" or $Win2 == "X" Then
          If $Win3 == "O" or $Win3 == "X" Then
             If $Win4 == "O" or $Win4 == "X" Then
                If $Win5 == "O" or $Win5 == "X" Then
                   If $Win6 == "O" or $Win6 == "X" Then
                      If $Win7 == "O" or $Win7 == "X" Then
                         If $Win8 == "O" or $Win8 == "X" Then
                            If $Win9 == "O" or $Win9 == "X" Then
                               MsgBox(0, "Ende", "Spiel ist zu Ende")
                               MsgBox(0, "Unentschieden", "Es gibt keinen Gewinner!")
                               _reset()
                            EndIf
                         EndIf
                      EndIf
                   EndIf
                EndIf
             EndIf
          EndIf
       EndIf
    EndIf
 EndSelect
EndFunc
while 1 ;wichtig damit die GUI offen bleibt;
WEnd
Hier der komplette Code


Code:
Func _KiZug()
    $KiZahl = random(1,9,1)
    Select
    Case $KiZahl == 1  And $ButtonFrei1 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE1, "O")
        $ButtonFrei1 = GUICtrlRead($ButtonE1)
       $WinE1 = 1
       $Spieler = 1
    Case $KiZahl == 2 And $ButtonFrei2 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE2, "O")
        $ButtonFrei2 = GUICtrlRead($ButtonE2)
       $WinE2 = 1
       $Spieler = 1
    Case $KiZahl == 3 And $ButtonFrei3 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE3, "O")
       $ButtonFrei3 = GUICtrlRead($ButtonE3)
       $WinE3 = 1
       $Spieler = 1
    Case $KiZahl == 4 And $ButtonFrei4 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE4, "O")
       $ButtonFrei4 = GUICtrlRead($ButtonE4)
       $WinE4 = 1
       $Spieler = 1
    Case $KiZahl == 5 And $ButtonFrei5 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE5, "O")
       $ButtonFrei5 = GUICtrlRead($ButtonE5)
       $WinE5 = 1
       $Spieler = 1
    Case $KiZahl == 6 And $ButtonFrei6 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE6, "O")
       $ButtonFrei6 = GUICtrlRead($ButtonE6)
       $Spieler = 1
       $WinE6 = 1
    Case $KiZahl == 7 And $ButtonFrei7 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE7, "O")
        $ButtonFrei7 = GUICtrlRead($ButtonE7)
       $WinE7 = 1
       $Spieler = 1
    Case $KiZahl == 8 And $ButtonFrei8 == ""
       Sleep(500)
       GUICtrlSetData($ButtonE8, "O")
       $ButtonFrei8 = GUICtrlRead($ButtonE8)
       $WinE8 = 1
       $Spieler = 1
    Case $KiZahl == 9 And $ButtonFrei9 == ""
       Sleep(500)
       $ButtonFrei9 = GUICtrlRead($ButtonE9)
       GUICtrlSetData($ButtonE9, "O")
       $WinE9 = 1
       $Spieler = 1
	Case Else
       _KiZug()
	EndSelect
EndFunc
Und hier die falsche Funktion

Danke im Vorraus

mengano
mengano is offline  
Old 06/02/2015, 16:03   #2

 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
Ohne mir den kompletten Code angeguckt zu haben, würde ich vermuten dass dein "Case Else" die Rekursion verursacht. Ich würde die Funktion lieber in eine While-Schleife umbauen. Bist du dir sicher, dass immer mind. 1 $BUttonFrei Variable ein leerer String ist? Und wann tritt der Error auf? Direkt am Anfang oder nach einiger Zeit? Du könntest dein Code auch debuggen um nach dem Fehler zu suchen
Moneypulation is offline  
Old 06/02/2015, 16:38   #3
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Es ist auch der rekursive Funktionsaufruf der das Programm crasht.
Schreib den Bereich einfach um das die Rekursion wegfällt.
alpines is offline  
Old 06/02/2015, 20:58   #4
 
elite*gold: 0
Join Date: Jun 2015
Posts: 2
Received Thanks: 0
Danke erstmal für die schnellen Antworten hier noch ein paar Infos:



Das Spiel (Tic Tac Toe mit KI) funktioniert so vom Code aus:
Wenn ich als Spieler gedrückt habe, dann wird die Funktion _KiZug() ausgeführt. In dieser Funktion wird eine Variable als random Zahl zwischen 1 und 9 (für die 9 Tic Tac Toe Buttons) gespeichert. Danach wird eine Case select schleife ausgeführt, die nach folgendem Prinzip arbeitet:

Wenn die Random Zahl == 1 ist und der Button1 (wird in der globalen Variable $ButtonFrei1 gespeichert) == "" ist, dann

...mache das und das

Das ganze wird auch noch für die anderen 8 Buttons gemacht. Falls keiner der Fälle eintritt, soll das ganze wiederholt werden.

Am Anfang klappt das noch ganz gut aber am Ende, wenn der Bot den letzten Button setzen soll (im falle eines Unentschiedens) dann kommt der stack overflow, obwohl die chance diesen Button zu erwischen ja bei 1 : 8 liegt. Das sollte den Stack doch nicht überlasten oder? Weil ich weiß nämlich nicht, wie man das sonst machen soll. Als Endlosschleife klappt das nicht, weil der PC soll ja nur setzen, wenn er auch dran ist, und nicht jedes Mal.

Danke schonmal
mengano
mengano is offline  
Old 06/02/2015, 21:25   #5
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
schleifen müssen ja nicht endlos sein. schleifen sind immer besser als rekursion
YatoDev is offline  
Old 06/02/2015, 23:20   #6
 
elite*gold: 0
Join Date: Apr 2011
Posts: 363
Received Thanks: 167
Why so much code dude use a simple winMatrix, u know that u have 8 ways to win, 9 symbols in each way, and a board with 9 symbols too.
So:
elmarcia is offline  
Old 06/03/2015, 17:02   #7
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Stack Overflow bedeutet wie bereits mehrfach erwähnt immer eine Rekursion, welche das Speicherlimit von Autoit überschreitet.

Tuh dir am besten selbst den gefallen und gewöhn dir das Arbeiten mit Schleifen und Arrays an (gerade bei 2D Projekten wie diesem)...

Der Code kann so deutlich übersichtlicher gehalten, und somit auch kontrolliert werden. Es macht schon einen Unterschied ob man 100 oder 1000 Zeilen Code nach Fehlern durchsucht.

Vor einiger Zeit gab es hier schonmal wen, der sich an TicTacTow versucht hat, wo ich mal ein kleines Beispiel für einen recht übersichtlichen Code gezeigt habe:


Kannst dir ja mal anschauen, wie sowas aussehen könnte. Dort einen Random Click nach der Playeraktion zu erzeugen, würde auch nur 1-2 Zeilen Code mehr benötigen.
lolkop is offline  
Reply

Tags
autoit, hilfe, programmieren, stack overflow


Similar Threads Similar Threads
[WBT] Ectos 3,5€/stack | Zkeys 2€/stack | Arms 0,50@/ea |Rare Pets | Trims!
01/10/2015 - Guild Wars Trading - 0 Replies
Heyho Community I wanna BUY! Ectos 3,5€/stack Zaishenkeys 2€/stack Arms 0,50€/ea Unded/ded Rare Pets And Trimmed guilds Cheers
Hilfe, Stack Overflow!
01/29/2014 - AutoIt - 6 Replies
Hallo ich programmiere grade mein ersten bot mit "ImageSearch" und habe das Problem das nach einer weile die Fehlermeldung stack overflow kommt und ich weis nicht wie ich das verhindern soll. Ich arbeite mit autoit seit 2 Wochen und das ist mein Ergebnis. Ich hoffe das ihr mir helfen könnt. Danke. Der autoit code
Voten für Deutsches Stack Overflow
02/14/2013 - Web Development - 2 Replies
Die meisten bzw. viele von euch kennen sicher das Stack Overflow. Es gibt (schon sehr lange) eine möglichkeit zum Voten für ein Deutsches (: Wäre natürlich sehr schick wenn diese in die Beta kommt. Dafür braucht man aber viele Unterstützer. Also Votet (Committen auf der linken seite) (x Stack Overflow (in German) - Area 51 - Stack Exchange
Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.
01/20/2013 - AutoIt - 4 Replies
Hallo Leute, ich hab das folgende Problem mit meinem Bot: Nach ca. 4-5 Std. Laufzeit meines Bots bekomme ich folgende Meldung... "Recursion level has been exceeded - AutoIt will quit to prevent stack overflow." Das ganze an völlig unterschiedlichen Stellen, es ist also wirklich die Addition die das Problem hervorruft und nicht eine bestimmte Funktion etc.
Koopa's Discount-Offer:Ectos 13,99€/stack! Lpicks 3,99/stack!
04/04/2012 - Guild Wars Trading - 0 Replies
Hey ;) My special offer until monday or sold-out. Enjoy :) Ectos in stock: 10 Stacks http://gwah.onlinewelten.com/images/Ektoplasmakuge l.png 8 stacks sold 1 Stack = 13,99€



All times are GMT +1. The time now is 19:43.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.