RechenFenster

  • Hallo an alle.
    ich habe vor eine Gui zu gestalten mit der ich Rechenaufgaben (+ und - bis 10)
    Lösen kann.

    ich möchte also z.b. 2 zufallszahlen 5x Addieren und 5x Subtrahieren
    wenn falsch gerechnet wrde, soll die Aufgabe wiederholt werden, wenn sie richtig ist, dann die Nächste
    ich habe schon mal etwas versucht aber so komme ich nicht weiter, ich kann die erste Aufgabe lösen aber komme nicht zur nächsten.
    hier mein Script, bitte nicht Lachen :S
    ich hoffe mir kann jemand helfen.

    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)
    $window_TR = GUICreate( "MyGui", 500,400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

    For $x = 1 to 1
    $i = Random(1,10,1)
    Next
    For $x2 = 1 to 1
    $i2 = Random(1,10,1)
    Next

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

    $buttonTRlsg = GUICtrlCreateButton ("=", 320,20,70,70)
    GUICtrlSetFont(-1,70,400)

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

    $LabelTR1 = GUICtrlCreateLabel($i&" + "& $i2, 10, 10, 290, 100)
    GUICtrlSetFont(-1,70,400)

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

    $in1=GUICtrlCreateInput("",400, 10, 90, 90)
    GUICtrlSetFont(-1,55,300)

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

    GUICtrlSetOnEvent($buttonTRlsg, "calc")
    GUISetState(@SW_SHOW, $window_TR)

    While 1
    sleep(1000)
    WEnd

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

    Func calc()
    $Erg = execute(GUICtrlRead($LabelTR1))
    GUICtrlSetData($LabelTR1, $Erg)
    if GUICtrlRead($in1) = $Erg then
    msgbox(0,"Super","Richtig gemacht :-D")
    Else
    msgbox(0,"Schade","Leider Falsch :-(")
    EndIf
    EndFunc

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

    Func Ende()
    Exit
    EndFunc

    [/autoit]
  • Habs mal schnell für die geändert.

    Spoiler anzeigen
    [autoit]

    #region ;************ Includes ************
    #include <GUIConstantsEx.au3>
    #endregion ;************ Includes ************

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

    Global $durchgang = 0

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

    Opt("GUIOnEventMode", 1)
    $window_TR = GUICreate("MyGui", 500, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    $buttonTRlsg = GUICtrlCreateButton("=", 320, 20, 70, 70)
    GUICtrlSetFont(-1, 70, 400)

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

    $LabelTR1 = GUICtrlCreateLabel("", 10, 10, 290, 100)
    GUICtrlSetFont(-1, 70, 400)

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

    $in1 = GUICtrlCreateInput("", 400, 10, 90, 90)
    GUICtrlSetFont(-1, 55, 300)

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

    GUICtrlSetOnEvent($buttonTRlsg, "calc")
    GUISetState(@SW_SHOW, $window_TR)

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

    _rechnen()

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

    Func _rechnen()
    GUICtrlSetData($in1, "")
    GUICtrlSetState($in1, $GUI_FOCUS)
    For $x = 1 To 1
    $i = Random(1, 10, 1)
    Next
    For $x2 = 1 To 1
    $i2 = Random(1, 10, 1)
    Next
    GUICtrlSetData($LabelTR1, $i & " + " & $i2)
    EndFunc ;==>_rechnen

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

    While 1
    Sleep(1000)
    WEnd

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

    Func calc()
    $durchgang += 1
    $Erg = Execute(GUICtrlRead($LabelTR1))
    GUICtrlSetData($LabelTR1, $Erg)
    If GUICtrlRead($in1) = $Erg Then
    MsgBox(0, "Super", "Richtig gemacht :-D")
    Else
    MsgBox(0, "Schade", "Leider Falsch :-(")
    EndIf
    If $durchgang = 5 Then Exit
    _rechnen()
    EndFunc ;==>calc

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

    Func Ende()
    Exit
    EndFunc ;==>Ende

    [/autoit]

    Du mußt nach dem lösen einer Aufgabe einfach das erstellen einer neuen Aufgabe wieder aufrufen.
    Nach der 5. Aufgabe beendet sich das Skript dann.

  • super danke, das hilft mir extrem weiter. ich wollte die random Funktion auch erst in eine func setzen wusste dann aber nicht wie ich sie umsetzen sollte, und ich dachte mir, eh ich das script 5x neu ineinanderschreibe gibts bestimmt ne einfachere Lösung. und siehe da: $durchgang += 1.
    dankeschön ^^

  • Wozu sind diese FOR-NEXT schleifen da ?

    [autoit]


    For $x = 1 To 1
    $i = Random(1, 10, 1)
    Next
    For $x2 = 1 To 1
    $i2 = Random(1, 10, 1)
    Next

    [/autoit]


    Das kapier ich nicht. ?(

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Wie mache ich es, wenn ich nun nach den 5 Additionsaufgaben 5 Subtraktions Aufgaben lösen möchte und/oder ander Arten wie z.B. Lückenrechen-Aufgaben

    Folgender Code Funktioniert Leider so Nicht, habe auch schon anderes Ausprobiert aber ich komme einfach nicht drauf:

    [autoit]

    #region ;************ Includes ************
    #include <GUIConstantsEx.au3>
    #endregion ;************ Includes ************

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

    Global $durchgang = 0

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

    Opt("GUIOnEventMode", 1)
    $window_TR = GUICreate("MyGui", 500, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    $buttonTRlsg = GUICtrlCreateButton("=", 320, 20, 70, 70)
    GUICtrlSetFont(-1, 70, 400)

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

    $LabelTR1 = GUICtrlCreateLabel("", 10, 10, 300, 100)
    GUICtrlSetFont(-1, 70, 400)

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

    $in1 = GUICtrlCreateInput("", 400, 10, 90, 90)
    GUICtrlSetFont(-1, 55, 300)

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

    GUICtrlSetOnEvent($buttonTRlsg, "calc")
    GUISetState(@SW_SHOW, $window_TR)

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

    _rechnen()

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

    Func _rechnen()
    GUICtrlSetData($in1, "")
    GUICtrlSetState($in1, $GUI_FOCUS)
    For $x = 1 To 1
    $i = Random(1, 10, 1)
    Next
    For $x2 = 1 To 1
    $i2 = Random(1, 10, 1)
    Next
    GUICtrlSetData($LabelTR1, $i & " + " & $i2)
    EndFunc ;==>_rechnen
    While 1
    Sleep(1000)
    WEnd

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

    Func calc()
    $durchgang += 1
    $Erg = Execute(GUICtrlRead($LabelTR1))
    GUICtrlSetData($LabelTR1, $Erg)
    If GUICtrlRead($in1) = $Erg Then
    MsgBox(0, "Super", "Richtig gemacht :-D")
    Else
    MsgBox(0, "Schade", "Leider Falsch :-(")
    EndIf
    If $durchgang = 5 Then
    GUICtrlSetOnEvent($buttonTRlsg, "calcminus")
    _rechnenminus()
    EndIf
    _rechnen()
    EndFunc ;==>calc

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

    _rechnenminus()

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

    Func _rechnenminus()
    GUICtrlSetData($in1, "")
    GUICtrlSetState($in1, $GUI_FOCUS)
    For $x = 1 To 1
    $i = Random(1, 10, 1)
    Next
    For $x2 = 1 To 1
    $i2 = Random(1, 10, 1)
    Next
    GUICtrlSetData($LabelTR1, $i & " - " & $i2)
    EndFunc ;==>_rechnenminus

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

    Func calcminus()
    $durchgang += 5
    $Erg = Execute(GUICtrlRead($LabelTR1))
    GUICtrlSetData($LabelTR1, $Erg)
    If GUICtrlRead($in1) = $Erg Then
    MsgBox(0, "Super", "Richtig gemacht :-D")
    Else
    MsgBox(0, "Schade", "Leider Falsch :-(")
    EndIf
    If $durchgang = 10 Then exit
    _rechnenminus()
    EndFunc ;==>calcminus

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

    Func Ende()
    Exit
    EndFunc ;==>Ende

    [/autoit]
  • Ich hoffe dir hilft folgendes

    Spoiler anzeigen
    [autoit]

    #region ;************ Includes ************
    #include <Array.au3>
    #include <String.au3>
    #include <GUIConstantsEx.au3>
    #endregion ;************ Includes ************

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

    Global $durchgang = 0, $s_string = "", $z = 1

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

    Opt("GUIOnEventMode", 1)
    $window_TR = GUICreate("MyGui", 500, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    $buttonTRlsg = GUICtrlCreateButton("=", 320, 20, 70, 70)
    GUICtrlSetFont(-1, 70, 400)

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

    $LabelTR1 = GUICtrlCreateLabel("", 10, 10, 300, 100)
    GUICtrlSetFont(-1, 70, 400)

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

    $in1 = GUICtrlCreateInput("", 400, 10, 90, 90)
    GUICtrlSetFont(-1, 55, 300)

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

    GUICtrlSetOnEvent($buttonTRlsg, "calc")
    GUISetState(@SW_SHOW, $window_TR)

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

    ;Array mit allen Aufgaben erstellen
    $s_string &= _StringRepeat("+", 2)
    $s_string &= _StringRepeat("-", 3)
    $array = StringSplit($s_string, "")
    ;~ _ArrayDisplay($array)

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

    ;Rechen-Func einmalig aufrufen
    _rechnen($array[1], 1)

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

    Func _rechnen($s_art, $s_max)
    GUICtrlSetData($in1, "")
    GUICtrlSetState($in1, $GUI_FOCUS)
    $i = Random(1, 10, 1)
    $i2 = Random(1, 10, 1)
    GUICtrlSetData($LabelTR1, $i & " " & $s_art & " " & $i2)
    EndFunc ;==>_rechnen

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

    Func calc()
    $Erg = Execute(GUICtrlRead($LabelTR1))
    GUICtrlSetData($LabelTR1, $Erg)
    If GUICtrlRead($in1) = $Erg Then
    MsgBox(0, "Super", "Richtig gemacht :-D")
    Else
    MsgBox(0, "Schade", "Leider Falsch :-(")
    EndIf

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

    If $z = UBound($array) - 1 Then Exit

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

    ;Rechen-Func aufrufen bis das Array durchlaufen wurde
    $z += 1
    _rechnen($array[$z], $z)
    EndFunc ;==>calc

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

    While 1
    Sleep(10)
    WEnd

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

    Func Ende()
    Exit
    EndFunc ;==>Ende

    [/autoit]

    Das mit dem Lücken-Rechner soltest du selber hinbekommen :rolleyes:

    PS: Bitte den Spoiler neben dem AutoIt Symbol "SP" verwenden. Dann wird der Thread nicht so endlos lang ;)

  • okay ich werde Deinen Vorschlag mit Dem Spoiler natürlich berücksichtigen.
    nur Leider versteh ich Dein Script nicht ganz.
    Es Funktioniert zwar aber wo wird festgelegt welchen Wert $s_art und $s_max besitzt?
    denn es wird ja zum ersten mal bei Func _rechnen($s_art, $s_max) benannt hat(für mich)
    aber keinen bezug zum Array.
    mir bringts ja nix, wenn ich Dein Vorschlag 1zu1 blind übernehme und nix Kapier.
    braucht bei mir machnmal länger :S

  • Hallo AsiX-5,

    [autoit]

    $s_art

    [/autoit]

    und

    [autoit]

    $s_max

    [/autoit]

    sind Parameter bzw. Argumente der Funktion (UDF)

    [autoit]

    _rechnen($s_art, $s_max)

    [/autoit]

    . Sie werden der Funktion beim Aufruf übergeben.
    In diesem Fall (Z. 33) sind das

    [autoit]

    $array[1]

    [/autoit]

    und 1.

    Diese Variablen nehmen dann innerhalb der Funktion jeweils den beim Aufruf der Funktion übergebenen Wert an und lassen sich so innerhalb der Funktion allgemein nutzen, ohne den Wert der Variablen immer kennen zu müssen.