Public Class Form1
    Private intAusblenden As Integer = 0          ' anzahl antwort ausgeblendet
    Private Const intMAXFRAGEN As Integer = 20    ' nur 20 fragen
    Private booSpielAktiv As Boolean = False      ' spiel gestartet?
    Private Tipp As New ToolTip()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Antworten.Add(TxtA0) : Antworten.Add(TxtA1)
        Antworten.Add(TxtA2) : Antworten.Add(TxtA3) : Antworten.Add(TxtA4) : Antworten.Add(TxtA5)
        Auswahl.Add(Cmd0) : Auswahl.Add(Cmd1)
        Auswahl.Add(Cmd2) : Auswahl.Add(Cmd3) : Auswahl.Add(Cmd4)
        '------------------------ schaltflächen beschriften
        CmdFrage.Text = "&Frage stellen" : CmdBeenden.Text = "B&eenden" : CmdAusblenden.Text = "Fa&lsch Antwort ausblenden"
        Cmd1.Text = "&A" : Cmd2.Text = "&B" : Cmd3.Text = "&C" : Cmd4.Text = "&D"
        '------------
        Tipp.AutoPopDelay = 5000 : Tipp.InitialDelay = 1000 : Tipp.ReshowDelay = 500 : Tipp.IsBalloon = True : Tipp.ShowAlways = False
        Tipp.SetToolTip(CmdBeenden, "Spiel beenden") : Tipp.SetToolTip(CmdFrage, "Eine Frage stellen") : Tipp.SetToolTip(CmdAusblenden, "Eine falsche Antwort wird ausgeblendet")
        Tipp.SetToolTip(LblPunkte, "Aktueller Punktestand")
        Tipp.SetToolTip(Cmd1, "Hier klicken, wenn Antwort >A< richtig ist") : Tipp.SetToolTip(Cmd2, "Hier klicken, wenn Antwort >B< richtig ist")
        Tipp.SetToolTip(Cmd3, "Hier klicken, wenn Antwort >C< richtig ist") : Tipp.SetToolTip(Cmd4, "Hier klicken, wenn Antwort >D< richtig ist")
        '------------------
        LblInfo.Text = "Klicken Sie auf die Schaltfläche >Frage stellen<, " & vbCrLf & "um den Quiz zu beginnen."
        Me.Text = "Quiz"
        LeseDatenAusDatei() '-- frage.txt einlesen
        MnuSpielNeu.Enabled = False
        Grundeinstellung()
    End Sub
    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.F1 Then  ' 112
            ZeigeSpielAnleitung()
        End If
    End Sub
    Private Sub CmdBeenden_Click(sender As Object, e As EventArgs) Handles CmdBeenden.Click
        BeendeDasSpiel()
    End Sub
    Private Sub BeendeDasSpiel()
        Dim strMeldung As String = "Sind Sie sicher," _
                   & vbCrLf & "dass Sie das Spiel beenden möchten?"
        Dim strTitel As String = "Spiel beenden"
        Dim buttons As MessageBoxButtons = MessageBoxButtons.YesNo
        Dim DefaultButton As MessageBoxDefaultButton = MessageBoxDefaultButton.Button2
        Dim Icon As MessageBoxIcon = MessageBoxIcon.Question
        Dim intResultat As DialogResult
        If MnuSoundAn.Checked Then
            Try
                My.Computer.Audio.PlaySystemSound(
                             System.Media.SystemSounds.Question)
            Catch ex As Exception
                ' keine aktion
            End Try
        End If
        intResultat = MessageBox.Show(strMeldung, strTitel, buttons, Icon, DefaultButton)
        '-- reaktion
        If (intResultat = DialogResult.Yes) Then
            Close()
        End If
    End Sub
    Private Sub CmdFrage_Click(sender As Object, e As EventArgs) Handles CmdFrage.Click
        If CmdFrage.Text = "&Neues Spiel" Then
            EinNeuesSpiel()
        Else
            If MnuSoundAn.Checked Then
                Try
                    My.Computer.Audio.Play("BLIP.WAV", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            End If
            FrageAuswaehlen()   ' im modul modQuiz
            intAusblenden = 0
            booSpielAktiv = True
            Dim i As Integer
            For i = 0 To 4
                Auswahl(i).Enabled = True
            Next
        End If
    End Sub
    Private Sub EinNeuesSpiel()
        Grundeinstellung()
        CmdFrage.Text = "&Frage stellen"
        intFragenAnzahl = 0 : LblNr.Text = "0"
        intPunktZahl = 0 : LblPunkte.Text = "0"
        LblInfo.Text = "Klicken Sie auf die Schaltfläche >Frage stellen<," & vbCrLf &
            " um den Quiz zu beginnen."
        Tipp.SetToolTip(CmdFrage, "Eine Frage stellen")
        MnuSpielNeu.Enabled = False
    End Sub
    Private Sub CmdAusblenden_Click(sender As Object, e As EventArgs) Handles CmdAusblenden.Click
        intAusblenden += 1
        Dim intRandom As New Random
        Dim intzufall As Integer
        booAusgeblendet(Convert.ToInt32(TxtA5.Text)) = True
        Do
            intzufall = intRandom.Next(1, 5)
            If Not booAusgeblendet(intzufall) Then
                booAusgeblendet(intzufall) = True
                Exit Do
            End If
        Loop
        Auswahl(intzufall).Enabled = False
        Antworten(intzufall).BackColor = Color.LightGray
        If intAusblenden >= 2 Then CmdAusblenden.Enabled = False
    End Sub
    Public Sub ProbeIstAntwortRichtig(intAntwortAufFrage As Integer)
        Dim i As Integer
        Dim strInfo As String
        Dim intProbe As Integer, intBekommtPunkte As Integer
        For i = i To 4 : Auswahl(i).Enabled = False : Next
        intProbe = Convert.ToInt32(TxtA5.Text)
        Antworten(intProbe).BackColor = Color.LightGreen
        If intProbe = intAntwortAufFrage Then
            strInfo = "Die Antwort ist richtig!"
            If intAusblenden = 0 Then
                If MnuSoundAn.Checked Then
                    Try
                        My.Computer.Audio.Play("TADA.WAV",
                             AudioPlayMode.Background)
                    Catch ex As Exception
                    End Try
                End If
                intBekommtPunkte = 40
            ElseIf intAusblenden = 1 Then
                intBekommtPunkte = 20
            Else
                intBekommtPunkte = 10
            End If
        Else
            If MnuSoundAn.Checked Then
                Try
                    My.Computer.Audio.Play("FEHLER.WAV",
                               AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            End If
            strInfo = "Die Antwort ist falsch!"
            Antworten(intAntwortAufFrage).BackColor = Color.Red
            intBekommtPunkte = 0
        End If
        intPunktZahl += intBekommtPunkte
        LblPunkte.Text = intPunktZahl.ToString
        CmdFrage.Text = "Nächste &Frage" : CmdFrage.Enabled = True
        CmdFrage.Focus() : CmdAusblenden.Enabled = False
        LblInfo.Text = strInfo & vbCrLf & "Sie erhalten " &
            intBekommtPunkte.ToString & "  Punkte " & vbCrLf &
            "Klicken Sie auf die Schaltfläche >Nächste Frage<"
        ProbeSpielEnde()
    End Sub

    Public Sub ProbeSpielEnde()
        If intFragenAnzahl >= intMAXFRAGEN Then
            booSpielAktiv = False
            If LstAlleFragen.Items.Count < 20 Then
                CmdFrage.Enabled = False
            Else
                CmdFrage.Text = "&Neues Spiel"
                Tipp.SetToolTip(CmdFrage, "Neues Spiel beginnen")
                MessageBox.Show("20 Fragen wurden gestellt." & vbCrLf &
                                "Falls Sie ein neues Spiel beginnen möchten," & vbCrLf &
                                "klicken Sie, nach dem Schließen dieser Meldung," & vbCrLf &
                                "auf die Schaltfläche >Neues Spiel<.", "Quiz",
                                MessageBoxButtons.OK, MessageBoxIcon.Information)
                LblInfo.Text = "Klicken Sie auf" & vbCrLf &
                    ">Neus Spiel< um ein neues Spiel zu beginnen."
                MnuSpielNeu.Enabled = True
            End If
        End If
    End Sub
    Private Sub ZeigeSpielAnleitung()
        Try
            Process.Start(System.IO.Path.Combine(Application.StartupPath, strSPIELANLEITUNG))
            'Process.Start(System.IO.Path.Combine(
            '
            'strSPIELANLEITUNG))
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub Cmd1_Click(sender As Object, e As EventArgs) Handles Cmd1.Click
        ProbeIstAntwortRichtig(1)
    End Sub

    Private Sub Cmd2_Click(sender As Object, e As EventArgs) Handles Cmd2.Click
        ProbeIstAntwortRichtig(2)
    End Sub

    Private Sub Cmd3_Click(sender As Object, e As EventArgs) Handles Cmd3.Click
        ProbeIstAntwortRichtig(3)
    End Sub

    Private Sub Cmd4_Click(sender As Object, e As EventArgs) Handles Cmd4.Click
        ProbeIstAntwortRichtig(4)
    End Sub
    Private Sub SoundEinstellungen()
        If MnuSoundAn.Checked Then
            MnuSoundAn.Checked = False : MnuSoundAus.Checked = True
        Else
            MnuSoundAn.Checked = True : MnuSoundAus.Checked = False
        End If
    End Sub

    Private Sub MnuSoundAn_Click(sender As Object, e As EventArgs) Handles MnuSoundAn.Click
        SoundEinstellungen()
    End Sub

    Private Sub MnuSoundAus_Click(sender As Object, e As EventArgs) Handles MnuSoundAus.Click
        SoundEinstellungen()
    End Sub

    Private Sub MnuSpielEnde_Click(sender As Object, e As EventArgs) Handles MnuSpielEnde.Click
        BeendeDasSpiel()
    End Sub

    Private Sub MnuSpielNeu_Click(sender As Object, e As EventArgs) Handles MnuSpielNeu.Click
        EinNeuesSpiel()
    End Sub

    Private Sub SpielanleitungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MnuInfoSpiel.Click
        ZeigeSpielAnleitung()
    End Sub

    Private Sub MnuInfoAllgemein_Click(sender As Object, e As EventArgs) Handles MnuInfoAllgemein.Click
        MessageBox.Show("Dieser Quiz ist Bestandteil des Kurses" & vbCrLf &
               "Spiele programmieren mit Visual Basic" & vbCrLf &
               "mit Microsoft Visual Studio 2023.")
    End Sub

End Class
