Module modSchieben

    Public AlleSteine As New ArrayList      ' array für alle spielsteine
    Public intVersuche As Integer = 0       ' versuche
    Public booGesperrt As Boolean = True    ' spielsteine nicht bewegen
    Private Property Location As Point      ' spielpositionen in x y
    Private intSteinPos As Integer          ' position des spielsteins 
    Private intLeerPosition As Integer      ' die aktuelle leerposition


    Public Sub LegePositionenFest()
        Dim intRandom As New Random
        Dim booGezogen(8) As Boolean
        Dim intZufall As Integer
        Dim intAnZahl As Integer = 0
        With Form1
            .LstPositionen.Items.Clear()
            Do
                intZufall = intRandom.Next(1, 9)
                If Not booGezogen(intZufall) Then
                    booGezogen(intZufall) = True
                    .LstPositionen.Items.Add(intZufall.ToString)
                    intAnZahl += 1
                End If
            Loop While intAnZahl < 8
            '------------------- Steine platzieren
            Dim i As Integer
            Dim intPosition As Integer
            For i = 0 To .LstPositionen.Items.Count - 1
                intPosition = Convert.ToInt32(.LstPositionen.Items(i))
                Select Case i
                    Case 0
                        AlleSteine(intPosition).Location = New Point(25, 40)
                    Case 1
                        AlleSteine(intPosition).Location = New Point(130, 40)
                    Case 2
                        AlleSteine(intPosition).Location = New Point(235, 40)
                    Case 3
                        AlleSteine(intPosition).Location = New Point(25, 145)
                    Case 4
                        AlleSteine(intPosition).Location = New Point(130, 145)
                    Case 5
                        AlleSteine(intPosition).Location = New Point(235, 145)
                    Case 6
                        AlleSteine(intPosition).Location = New Point(25, 250)
                    Case 7
                        AlleSteine(intPosition).Location = New Point(130, 250)
                End Select
            Next
            .LstPositionen.Items.Add("0")
            .LblInfo.Text = "Klicke auf den Spielstein," &
                vbCrLf & "den Du verschieben möchtest."
        End With
    End Sub

    Public Sub SchiebeDenSteinInPosition(intSteinNr)
        Dim i As Integer
        Dim intAusListe As Integer
        intSteinPos = -1
        With Form1
            '--------------- position des Spielsteines
            For i = 0 To .LstPositionen.Items.Count - 1
                intAusListe = Convert.ToInt32(.LstPositionen.Items(i))
                If intSteinNr = intAusListe Then
                    intSteinPos = i : Exit For
                End If
            Next
            '-------------- freie position
            intLeerPosition = -1
            For i = 0 To .LstPositionen.Items.Count - 1
                If .LstPositionen.Items(i) = "0" Then
                    intLeerPosition = i : Exit For
                End If
            Next
            If intSteinNr = (-1) Or intLeerPosition = (-1) Then
                MessageBox.Show("Listeneintrag nicht gefunden!!")
                Exit Sub    '---->
            End If
            '-----------------  spielstein neu position
            Dim booSteinBewegt As Boolean = False
            Select Case intLeerPosition
                Case 0   '-- 1 und 3     position  25   40
                    If intSteinPos = 1 Or intSteinPos = 3 Then
                        AlleSteine(intSteinNr).Location = New Point(25, 40)
                        booSteinBewegt = True
                    End If
                Case 1   '-- 0, 2 und 4   position  130   40
                    If intSteinPos = 0 Or intSteinPos = 2 Or intSteinPos = 4 Then
                        AlleSteine(intSteinNr).Location = New Point(130, 40)
                        booSteinBewegt = True
                    End If
                Case 2   '-- 1 und 5     position   235   40
                    If intSteinPos = 1 Or intSteinPos = 5 Then
                        AlleSteine(intSteinNr).Location = New Point(235, 40)
                        booSteinBewegt = True
                    End If
                Case 3  '--- 0, 4 und 6     position 25   145
                    If intSteinPos = 0 Or intSteinPos = 4 Or intSteinPos = 6 Then
                        AlleSteine(intSteinNr).Location = New Point(25, 145)
                        booSteinBewegt = True
                    End If
                Case 4  '-- 1, 3, 5  und 7  position 130   145
                    If intSteinPos = 1 Or intSteinPos = 3 Or intSteinPos = 5 Or intSteinPos = 7 Then
                        AlleSteine(intSteinNr).Location = New Point(130, 145)
                        booSteinBewegt = True
                    End If
                Case 5   '-- 2,4 und 8    position 235   145
                    If intSteinPos = 2 Or intSteinPos = 4 Or intSteinPos = 8 Then
                        AlleSteine(intSteinNr).Location = New Point(235, 145)
                        booSteinBewegt = True
                    End If
                Case 6   '-- 3 und 7      position 25   250
                    If intSteinPos = 7 Or intSteinPos = 3 Then
                        AlleSteine(intSteinNr).Location = New Point(25, 250)
                        booSteinBewegt = True
                    End If
                Case 7   '-- 6,4 und 8    position = 130   250
                    If intSteinPos = 6 Or intSteinPos = 4 Or intSteinPos = 8 Then
                        AlleSteine(intSteinNr).Location = New Point(130, 250)
                        booSteinBewegt = True
                    End If
                Case 8   '-- 7 und  5     position = 235   250
                    If intSteinPos = 7 Or intSteinPos = 5 Then
                        AlleSteine(intSteinNr).Location = New Point(235, 250)
                        booSteinBewegt = True
                    End If
            End Select
            If booSteinBewegt Then
                .LblInfo.Text = "Der Stein " & intSteinNr.ToString & vbCrLf &
                    "wurde in die neue Positon bewegt!"
                intVersuche += 1   ' anzahl der versuche
                .LblA.Text = intVersuche.ToString
                '--------------------- einträge in der liste ändern
                .LstPositionen.Items.RemoveAt(intSteinPos)
                .LstPositionen.Items.Insert(intSteinPos, "0")
                .LstPositionen.Items.RemoveAt(intLeerPosition)
                .LstPositionen.Items.Insert(intLeerPosition, intSteinNr.ToString)
            Else
                .LblInfo.Text = "Der Stein " & intSteinNr.ToString &
                    " kann nicht bewegt werden."
            End If
        End With
        AllesRichtig()
    End Sub
    Private Sub AllesRichtig()
        Dim booAllesRichtig As Boolean = True
        Dim intAusListe As Integer
        With Form1.LstPositionen
            For i = 0 To .Items.Count - 2
                intAusListe = Convert.ToInt32(.Items(i))
                If intAusListe <> (i + 1) Then
                    booAllesRichtig = False
                    Exit For
                End If
            Next
        End With
        If booAllesRichtig Then
            MessageBox.Show("Du hast " & intVersuche.ToString &
                " Versuche benötigt!", "Schiebespiel")
            Form1.CmdNeuesSpiel.Enabled = True
            Form1.MnuSpielNeues.Enabled = True
            booGesperrt = True
            intVersuche = 0
        End If
    End Sub
End Module
