Quiz erstellen mit einer Varriablen Anzahl von Fragen

  • Hi,
    ich wollt mal fragen ob ihr eine Möglichkeit wisst wie man ein Quiz erstellen kann in dem man über eine .ini Datei einstellen kann wie viele Fragen es gibt.

    Die Fragen und Antwortmöglichkeiten soll man auch über die .ini einstellen können.

    Mit einer fest eingestellter Anzahl von Fragen ist das alles ja kein Problem, aber mir fällt kein weg ein wie man das mit einer Varriablen Anzahl von Fragen machen kann.

  • Das Problem ist auch nicht grösser als bei einer festen Anzahl. Du liest die Fragen + Antwortmöglichkeiten mit IniReadSection in ein Array. Dieses kannst du dann mit einer For...Next Schleife (mit Hilfe UBound) durchlaufen.

    mfg autoBert

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $rAntworten=0
    $var = IniReadSection(@ScriptDir&"\test.ini", "sektion")
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $Form1 = GUICreate("Frage 1", 633, 454, 192, 114)
    $Radio1 = GUICtrlCreateRadio("", 72, 120, 113, 17)
    $Radio2 = GUICtrlCreateRadio("B", 400, 120, 113, 17)
    $Radio3 = GUICtrlCreateRadio("C", 72, 256, 113, 17)
    $Radio4 = GUICtrlCreateRadio("D", 400, 256, 113, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 272, 368, 75, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Die Frage lautet...", 72, 8, 452, 57)

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

    $i=5
    GUICtrlSetData ($Label1, $var[$i][0])
    GUICtrlSetData ($Radio1, $var[$i][1])
    GUICtrlSetData ($Radio2, $var[$i+1][1])
    GUICtrlSetData ($Radio3, $var[$i+2][1])
    GUICtrlSetData ($Radio4, $var[$i+3][1])

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

    GUICtrlSetOnEvent($Button1, "ButtonWeiter")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISwitch($Label1)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(1000) ; Häng rum
    WEnd

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

    Func ButtonWeiter()
    If GUICtrlRead($Radio1)=1 then $rAntworten=$rAntworten+1
    MsgBox(0,"Richtige Antworten",$rAntworten)
    $i=$i+4
    MsgBox(0,"i",$i)
    EndFunc

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

    Func CLOSEClicked()
    Exit
    EndFunc

    [/autoit]

    So weit bin ich bis jetzt gekommen. Aber das funzt nicht so wie ich das will. Eigentlich möchte ich das er wenn ich Botton1 drücke auf die nächste Frage mit den nächsten 4 Antworten springt aber so wie ich das habe funktioniert das nicht.

  • Code
    [sektion]
    Wie viele Antworten=Eins
    Wie viele Antworten=Zwei
    Wie viele Antworten=Drei
    Wie viele Antworten=Vier
    Wie viele Antworten2=5
    Wie viele Antworten2=6
    Wie viele Antworten2=7
    Wie viele Antworten2=8

    Ist nur eine Beispiel ini.

  • Die Keys sind an sich ja egal da ich das ja mit IniReadSection mache.
    Er ließt die Werte ja auch ohne Probleme eine nur das mit dem WeiterButton bekomme ich nicht hin das er dann die nächste Frage+4Antworten anzeigt

    edit: $i sollte am Anfang eigentlich 1 sein und nicht 5 hatte das nur für Test zwecke einmal geändert und ver gessen zurück zu ändern.

    edit2:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $rAntworten=0
    $var = IniReadSection(@ScriptDir&"\test.ini", "sektion")
    $AnzahlFragen=3
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $Form1 = GUICreate("Quiz", 633, 454, 192, 114)
    $Radio1 = GUICtrlCreateRadio("", 72, 120, 113, 17)
    $Radio2 = GUICtrlCreateRadio("", 400, 120, 113, 17)
    $Radio3 = GUICtrlCreateRadio("", 72, 256, 113, 17)
    $Radio4 = GUICtrlCreateRadio("", 400, 256, 113, 17)
    $Button1 = GUICtrlCreateButton("Weiter", 272, 368, 75, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("", 72, 8, 452, 57)

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

    $i=1
    GUICtrlSetData ($Label1, $var[$i][0])
    GUICtrlSetData ($Radio1, $var[$i][1])
    GUICtrlSetData ($Radio2, $var[$i+1][1])
    GUICtrlSetData ($Radio3, $var[$i+2][1])
    GUICtrlSetData ($Radio4, $var[$i+3][1])

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

    GUICtrlSetOnEvent($Button1, "ButtonWeiter")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISwitch($Label1)
    GUISetState(@SW_SHOW)

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

    ;~ Select

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

    While 1
    Sleep(1000) ; Häng rum
    WEnd

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

    Func ButtonWeiter()
    If GUICtrlRead($Radio1)=1 Or GUICtrlRead($Radio2)=1 Or GUICtrlRead($Radio3)=1 Or GUICtrlRead($Radio4)=1 then
    If GUICtrlRead($Radio1)=1 then $rAntworten=$rAntworten+1
    MsgBox(0,"Richtige Antworten",$rAntworten)
    $i=$i+4
    GUICtrlSetData ($Label1, $var[$i][0])
    GUICtrlSetData ($Radio1, $var[$i][1])
    GUICtrlSetData ($Radio2, $var[$i+1][1])
    GUICtrlSetData ($Radio3, $var[$i+2][1])
    GUICtrlSetData ($Radio4, $var[$i+3][1])
    If $AnzahlFragen-1=($i-1)/4 Then
    GUICtrlSetData ($Button1, "Ergebniss")
    GUICtrlSetOnEvent($Button1, "Ergebniss")
    EndIf
    Else
    MsgBox(0,"Fehler", "Bitte Antwort makieren")
    EndIf
    EndFunc

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

    Func Ergebniss()
    If GUICtrlRead($Radio1)=1 Or GUICtrlRead($Radio2)=1 Or GUICtrlRead($Radio3)=1 Or GUICtrlRead($Radio4)=1 then
    If GUICtrlRead($Radio1)=1 then $rAntworten=$rAntworten+1
    MsgBox(0,"Auswertung","Du hast "&$rAntworten&" von "&$AnzahlFragen&" Antworten richtig")
    Exit
    Else
    MsgBox(0,"Fehler", "Bitte Antwort makieren")
    EndIf
    EndFunc

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

    Func CLOSEClicked()
    Exit
    EndFunc

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

    So läuft das jetzt ganz gut mit der gleichen ini wie oben. Ist zwar villt nicht ganz saube umgesetzt aber es erfüllt seinen Zweck. Muss noch ein paar Sachen bearbeiten das es besser aussieht und so aber für den ersten Versuch mit GUIs find ich das nicht schlecht :)

    2 Mal editiert, zuletzt von Snakey (20. Januar 2011 um 16:00)