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)
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
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, <> "" 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
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
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