Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 6: Программирование на Visual Basic искусственного интеллекта. Продолжение 2. Валерий Алексеевич Жарков
Чтение книги онлайн.

Читать онлайн книгу Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 6: Программирование на Visual Basic искусственного интеллекта. Продолжение 2 - Валерий Алексеевич Жарков страница 12

СКАЧАТЬ Function

      ''' <summary>

      ''' After the blocks are removed from the columns, there may be

      ''' columns that are empty. Move columns from right to left to

      ''' fill in the empty columns.

      ''' </summary>

      ''' <remarks></remarks>

      Public Sub CollapseColumns()

      Dim row As Integer

      Dim column As Integer

      For column = matrix.GetLength(1) – 1 To 0 Step -1

      ' If column is completely empty, then all the columns

      ' over one.

      Dim noBlocks As Boolean = True

      For row = 0 To matrix.GetLength(0) – 1

      If Not matrix(row, column) Is Nothing Then

      noBlocks = False

      End If

      Next

      If noBlocks Then

      Dim newcol As Integer

      For newcol = column To matrix.GetLength(1) – 2

      For row = 0 To matrix.GetLength(0) – 1

      matrix(row, newcol) = matrix(row, newcol + 1)

      Next

      Next

      newcol = matrix.GetLength(1) – 1

      For row = 0 To matrix.GetLength(0) – 1

      matrix(row, newcol) = Nothing

      Next

      End If

      Next

      End Sub

      ''' <summary>

      ''' Remove all the blocks from the grid.

      ''' </summary>

      ''' <remarks></remarks>

      Public Sub CollapseBlocks()

      Dim theBlock As Block

      Dim column As Integer

      Dim row As Integer

      Dim aRow As Integer

      ' First remove the blocks from each column.

      For column = 0 To matrix.GetLength(1) – 1

      For row = matrix.GetLength(0) – 1 To 0 Step -1

      theBlock = matrix(row, column)

      If (Not theBlock Is Nothing) Then

      If theBlock.MarkedForDeletion Then

      For aRow = row To matrix.GetLength(0) – 2

      matrix(aRow, column) = _

      matrix(aRow + 1, column)

      Next

      matrix(matrix.GetLength(0) – 1, _

      column) = Nothing

      End If

      End If

      Next

      Next

      ' Reset the MarkedForDeletion flags.

      For row = 0 To matrix.GetLength(0) – 1

      For column = 0 To matrix.GetLength(1) – 1

      theBlock = matrix(row, column)

      If Not theBlock Is Nothing Then

      theBlock.MarkedForDeletion = False

      End If

      Next

      Next

      ' Remove any columns that are now empty.

      CollapseColumns()

      End Sub

      ''' <summary>

      ''' Provides access into the grid.

      ''' </summary>

      ''' <param name="row"></param>

      ''' <param name="column"></param>

      ''' <value></value>

      ''' <remarks></remarks>

      Default Public Property Item(ByVal row As Integer, _

      ByVal column As Integer) As Block

      Get

      Return matrix(row, column)

      End Get

      Set(ByVal Value As Block)

      matrix(row, column) = Value

      End Set

      End Property

      Private blocksToExamine As ArrayList

      ''' <summary>

      ''' Set MarkedForDeletion to True for each neighboring block

      ''' of the same color.

      ''' </summary>

      ''' <param name="row"></param>

      ''' <param name="column"></param>

      ''' <remarks></remarks>

      Private Sub FindSameColorNeighbors(ByVal row As Integer, _

      ByVal column As Integer)

      Dim color As Color = matrix(row, column).Color

      blocksToExamine = New ArrayList

      blocksToExamine.Add(New Point(row, column))

      matrix(row, column).MarkedForDeletion = True

      ' Each time you find a neighbor, mark it for deletion, and

      ' add it to the list of blocks to look for neighbors.

      ' After you

      ' examine it, remove it from the list. Keep doing this

      ' СКАЧАТЬ