Brauche Hilfe bei einem fast "fertigem" Multiple Choice Program

  • hey leute...
    in den letzten paar tagen habe ich, wenn ich ein bisschen zeit hatte, an diesem multiple choice program geschrieben. dies ist soweit auch "fertig", allerdings bekomme ich es nicht mit der zufall wiedergabe der fragen hin. es kommen immer ein paar fragen doppelt bzw. werden ausgelassen. kann mir einer dabei helfen? :)

    ansonsten wäre es nett wenn ich von euch ein feedback zu meinem bisherigem werk bekomme ;)

    [autoit]


    ; =====================================================================
    ; Include-Dateien einbinden
    ; =====================================================================
    #Include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    ; =====================================================================
    ; Variablen defnieren
    ; =====================================================================
    Global Const $s_title = "Multiple - Choice"
    Global $a_menue_option[4] = ["Datenbank laden", "Datenbank editieren", "", "Beenden"]
    Global $a_menue_hilfe[3] = ["Google aufrufen", "Anleitung", "Über..."]
    Global $a_label[3] = ["Richtig:", "Bisher:", "Gesamt:"]
    Global $a_stand[3] = ["0", "0", "0"]
    Global $a_erledigte_fragen[1] = [1]
    Global $s_file = Default, $s_errortext = Default
    Global $h_GUI, $h_label_frage, $i_falsch = 0
    Global $h_checkbox_antwort_1, $h_checkbox_antwort_2, $h_checkbox_antwort_3, $h_checkbox_antwort_4
    Global $s_anleitungstext = "Die ist ein einfaches Frage - Antwort Spiel im Sinne von" & @CRLF & "Multiple - Choice!" & @CRLF & "Um ein Quiz zu starten einfach eine Datenbank laden." & @CRLF & "Dies muss allerdings ein Textdokument sein!"
    $s_anleitungstext &= @CRLF & "Die Fragen müssen eine spezielle Form haben." & @CRLF & @CRLF & "Zum Beispiel:" & @CRLF & "F:Was ist keine Jahreszeit?" & @CRLF
    $s_anleitungstext &= "B:bild.jpg" & @CRLF & "R1:Ostern" & @CRLF & "F2:Herbst" & @CRLF & "F3:Frühling" & @CRLF & "F4:Sommer" & @CRLF & @CRLF & "Die Atribute 'F' und 'R' gegen an ob die Frage richtig oder falsch ist!" & @CRLF
    $s_anleitungstext &= "Die Fragen müssen durchnummeriert werden!"
    Global $a_erledigte_fragen[1] = [""]
    Global $hex_rot = 0xDB0007, $hex_gruen = 0x00ff00
    Global $s_attribut = Default, $a_fragen_backup, $h_status
    ; =====================================================================
    ; =====================================================================
    ; Hauptprogramm
    ; =====================================================================
    ; =====================================================================
    $h_GUI = GUICreate($s_title, 300, 330, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX))
    GUISetFont(10, 400, 0, "Comic Sans MS")
    $h_menue_option = GUICtrlCreateMenu("Option")
    For $i = 0 To UBound($a_menue_option) - 1
    $a_menue_option[$i] = GUICtrlCreateMenuItem($a_menue_option[$i], $h_menue_option)
    Next
    $h_menue_hilfe = GUICtrlCreateMenu("Hilfe")
    For $i = 0 To UBound($a_menue_hilfe) - 1
    $a_menue_hilfe[$i] = GUICtrlCreateMenuItem($a_menue_hilfe[$i], $h_menue_hilfe)
    Next
    $h_group = GUICtrlCreateGroup("Status", 5, 5, 290, 45)
    GUICtrlSetResizing($h_group, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKRIGHT)
    For $i = 0 To UBound($a_label) - 1
    $a_label[$i] = GUICtrlCreateLabel($a_label[$i], $i * 90 + 20, 25, 70, 20)
    $a_stand[$i] = GUICtrlCreateLabel($a_stand[$i], $i * 90 + 80, 25, 20, 20)
    Next
    GUICtrlSetResizing($a_label[0], $GUI_DOCKLEFT + $GUI_DOCKTOP)
    GUICtrlSetResizing($a_label[1], $GUI_DOCKTOP)
    GUICtrlSetResizing($a_label[2], $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlSetResizing($a_stand[0], $GUI_DOCKLEFT + $GUI_DOCKTOP)
    GUICtrlSetResizing($a_stand[1], $GUI_DOCKTOP)
    GUICtrlSetResizing($a_stand[2], $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $h_button = GUICtrlCreateButton("Überprüfen", 50, 250, 200, 30)
    GUICtrlSetResizing($h_button, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    GUISetState(@SW_SHOW, $h_GUI)

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

    While 1
    Switch GUIGetMsg()
    Case $a_menue_hilfe[1]
    MsgBox(64, "Anleitung", $s_anleitungstext)
    Case -4
    GUISetState(@SW_MINIMIZE, $h_GUI)
    Case -3
    Exit
    Case $a_menue_option[0]
    $s_file = FileOpenDialog($s_title, @ScriptDir & "\", "Text (*.txt)", 3)
    $a_inhalt = einlesen($s_file)
    If @error Then
    If @error = 1 Then $s_errortext = "Die Datei konnte nicht geöffnet werden!"
    If @error = 2 Then $s_errortext = "Der Inhalt konnte nicht gelesen werden!"
    If @error = 3 Then $s_errortext = "Fragen konnten nicht geordnet werden!"
    MsgBox(16, "Error", $s_errortext)
    Else
    $a_inhalt = sortieren($a_inhalt)
    GUICtrlSetData($a_stand[2], UBound($a_inhalt, 1))
    $h_label_frage = GUICtrlCreateLabel($a_inhalt[0][0], 50, 70)
    $a_fragen = StringSplit($a_inhalt[0][2], "|", 2)
    $a_fragen_backup = $a_fragen
    For $i = 0 To UBound($a_fragen, 1) - 1
    $a_fragen[$i] = GUICtrlCreateCheckbox(StringTrimLeft(String($a_fragen[$i]), StringInStr($a_fragen[$i], ":")), 70, $i * 30 + 105)
    Next
    EndIf
    Case $h_button
    If GUICtrlRead($h_button) = "Weiter" Then
    For $i = 0 To 3
    GUICtrlDelete($a_fragen[$i])
    Next
    GUICtrlDelete($h_label_frage)
    If GUICtrlRead($a_stand[1]) = GUICtrlRead($a_stand[2]) Then
    MsgBox(64, "Fertig", "Sie haben " & GUICtrlRead($a_stand[0]) & " von " & GUICtrlRead($a_stand[2]) & " Fragen richtig beantwortet!")
    Else
    ;~ Do
    ;~ $ausstehend = True
    ;~ $i_zufall = Random(2, UBound($a_inhalt, 1) - 1, 1)
    ;~ For $i = 0 To UBound($a_erledigte_fragen, 1) - 1
    ;~ If $a_erledigte_fragen[$i] = $i_zufall Then
    ;~ $ausstehend = False
    ;~ EndIf
    ;~ Next
    ;~ Until $ausstehend = True
    ;~ wic($a_erledigte_fragen)
    ;~ $i_ubound = UBound($a_erledigte_fragen, 1)
    ;~ ReDim $a_erledigte_fragen[$i_ubound + 1]
    ;~ $a_erledigte_fragen[$i_ubound] = $i_zufall
    $a_erledigte_fragen[0] += 1
    $i_zufall = $a_erledigte_fragen[0]
    $h_label_frage = GUICtrlCreateLabel($a_inhalt[$i_zufall][0], 50, 70)
    $a_fragen = StringSplit($a_inhalt[$i_zufall][2], "|", 2)
    $a_fragen_backup = $a_fragen
    For $i = 0 To UBound($a_fragen, 1) - 1
    $a_fragen[$i] = GUICtrlCreateCheckbox(StringTrimLeft(String($a_fragen[$i]), StringInStr($a_fragen[$i], ":")), 70, $i * 30 + 105)
    Next
    GUICtrlSetData($h_button, "Überprüfen")
    EndIf
    ElseIf GUICtrlRead($h_button) = "Überprüfen" And $s_file <> Default Then
    $i_falsch = 0
    For $i = 0 To 3
    $s_attribut = StringLeft(String($a_fragen_backup[$i]), 1)
    $h_status = GUICtrlRead($a_fragen[$i])
    If $h_status = 1 And $s_attribut = "R" Then
    GUICtrlSetBkColor($a_fragen[$i], $hex_gruen)
    ElseIf $h_status = 4 And $s_attribut = "R" Then
    GUICtrlSetBkColor($a_fragen[$i], $hex_rot)
    $i_falsch += 1
    ElseIf $h_status = 4 And $s_attribut = "F" Then
    GUICtrlSetBkColor($a_fragen[$i], $hex_gruen)
    ElseIf $h_status = 1 And $s_attribut = "F" Then
    GUICtrlSetBkColor($a_fragen[$i], $hex_rot)
    $i_falsch += 1
    EndIf
    Next
    If $i_falsch == 0 Then
    GUICtrlSetData($a_stand[0], GUICtrlRead($a_stand[0]) + 1)
    EndIf
    GUICtrlSetData($a_stand[1], GUICtrlRead($a_stand[1]) + 1)
    GUICtrlSetData($h_button, "Weiter")
    EndIf
    Case $a_menue_option[1]
    $s_file = FileOpenDialog($s_title, @ScriptDir & "\", "Text (*.txt)", 3)
    ShellExecute($s_file)
    Case $a_menue_option[3]
    Exit
    Case $a_menue_hilfe[0]
    _IECreate("www.google.de")
    Case $a_menue_hilfe[2]
    MsgBox(64, "Über...", "Erstellt von Redhead!")
    EndSwitch
    WEnd

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

    Func einlesen($s_file)
    Local $a_inhalt[1] = [""]
    Local $s_line = Default
    Local $i_ubound = Default
    Local $h_fileopen = FileOpen($s_file, 0)
    If $h_fileopen = -1 Then Return SetError(1, 0, 0)
    Local $s_inhalt = FileRead($h_fileopen, FileGetSize($s_file))
    If $s_inhalt = -1 Then Return SetError(2, 0, 0)
    FileClose($h_fileopen)
    If StringRight($s_inhalt, 1) = @LF Then $s_inhalt = StringTrimRight($s_inhalt, 1)
    If StringRight($s_inhalt, 1) = @CR Then $s_inhalt = StringTrimRight($s_inhalt, 1)
    If StringInStr($s_inhalt, @LF) Then
    Local $a_inhalt_ex = StringSplit(StringStripCR($s_inhalt), @LF, 2)
    Else
    Return SetError(3, 0, 0)
    EndIf
    For $i_counter = 0 To UBound($a_inhalt_ex) - 1
    $s_line = String($a_inhalt_ex[$i_counter])
    If StringLeft($s_line, 1) <> "#" And StringLeft($s_line, 1) <> ";" And StringStripWS($s_line, 8) <> "" Then
    $i_ubound = UBound($a_inhalt)
    ReDim $a_inhalt[$i_ubound + 1]
    $a_inhalt[$i_ubound] = $a_inhalt_ex[$i_counter]
    EndIf
    Next
    For $i_counter = 0 To UBound($a_inhalt) - 2
    $a_inhalt[$i_counter] = $a_inhalt[$i_counter + 1]
    Next
    ReDim $a_inhalt[UBound($a_inhalt) - 1]
    If UBound($a_inhalt) < 5 Then Return SetError(3, 0, 0)
    Return $a_inhalt
    EndFunc

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

    Func sortieren($a_array)
    Local $a_inhalt[1][3] = [["", "", ""]]
    Local $s_antworten = Default
    Local $i_ubound_1 = Default
    Local $i_ubound_2 = Default
    For $i = 0 To UBound($a_array) - 1 Step 6
    $s_antworten = $a_array[$i + 2] & "|" & _
    $a_array[$i + 3] & "|" & _
    $a_array[$i + 4] & "|" & _
    $a_array[$i + 5]
    $i_ubound_1 = UBound($a_inhalt, 1)
    $i_ubound_2 = UBound($a_inhalt, 2)
    ReDim $a_inhalt[$i_ubound_1 + 1][$i_ubound_2 + 1]
    $a_inhalt[$i_ubound_1][1] = StringTrimLeft(String($a_array[$i]), StringInStr($a_array[$i], ":"))
    $a_inhalt[$i_ubound_1][2] = StringTrimLeft(String($a_array[$i + 1]), StringInStr($a_array[$i + 1], ":"))
    $a_inhalt[$i_ubound_1][3] = $s_antworten
    Next
    For $i_counter = 0 To $i_ubound_1 - 1
    For $i = 0 To $i_ubound_2 - 2
    $a_inhalt[$i_counter][$i] = $a_inhalt[$i_counter + 1][$i + 1]
    Next
    Next
    ReDim $a_inhalt[UBound($a_inhalt, 1) - 1][UBound($a_inhalt, 2) - UBound($a_inhalt, 1) + 1]
    Return $a_inhalt
    EndFunc

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

    Func wic($text)
    If IsArray($text) Then
    Switch UBound($text, 0)
    Case 1
    For $i = 0 To UBound($text, 1) - 1
    ConsoleWrite($text[$i] & @CRLF)
    Next
    Case 2
    For $i = 0 To UBound($text, 1) - 1
    For $m = 0 To UBound($text, 2) - 1
    ConsoleWrite($text[$i][$m] & @CRLF)
    Next
    Next
    Case 3
    For $i = 0 To UBound($text, 1) - 1
    For $m = 0 To UBound($text, 2) - 1
    For $k = 0 To UBound($text, 3) - 1
    ConsoleWrite($text[$i][$m][$k] & @CRLF)
    Next
    Next
    Next
    EndSwitch
    Else
    ConsoleWrite($text & @CRLF)
    EndIf
    EndFunc

    [/autoit]