; =====================================================================
; 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, 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

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