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

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

СКАЧАТЬ style="font-size:15px;">      ''' <remarks></remarks>

      Public Sub AddRow()

      Dim column As Integer

      ' Add a new block to each column.

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

      Dim newBlock As New Block(New Color() _

      {Color.Red, Color.Blue, Color.Green, Color.Gray})

      ' Add the new block at the botttom of the column,

      ' and push the rest of the

      ' blocks up one column.

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

      matrix(row, column) = matrix(row – 1, column)

      Next

      matrix(0, column) = newBlock

      Next

      End Sub

      ''' <summary>

      ''' Draw the grid of blocks

      ''' </summary>

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

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

      ''' <remarks></remarks>

      Public Sub Draw(ByVal graphics As Graphics, _

      ByVal backColor As Color)

      graphics.Clear(backColor)

      Dim row As Integer

      Dim column As Integer

      Dim theBlock As Block

      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

      Dim pointA As New Point( _

      column * Block.BlockSize, _

      row * Block.BlockSize)

      matrix(row, column).Draw(graphics, pointA)

      End If

      Next

      Next

      End Sub

      ''' <summary>

      ''' This method responds to a click event in the UI.

      ''' </summary>

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

      ''' <returns>The number of blocks removed from the grid.</returns>

      ''' <remarks></remarks>

      Public Function Click(ByVal point As Point) As Integer

      ' Figure out row and column.

      Dim total As Integer

      Dim transPt As Point = PointTranslator.TranslateToTL(point)

      Dim selectedRow As Integer = transPt.Y \ Block.BlockSize

      Dim selectedColumn As Integer = transPt.X \ Block.BlockSize

      Dim selectedBlock As Block = matrix(selectedRow, _

      selectedColumn)

      If Not selectedBlock Is Nothing Then

      selectedBlock.MarkedForDeletion = True

      ' Determine if any of the neighboring blocks are

      ' the same color.

      FindSameColorNeighbors(selectedRow, selectedColumn)

      ' Determine how many blocks would be eliminated.

      total = Me.CalculateScore()

      If total > 1 Then

      Me.CollapseBlocks()

      Else

      Me.ClearMarkedForDeletion()

      End If

      End If

      Return total

      End Function

      Private Sub ClearMarkedForDeletion()

      Dim row As Integer

      Dim column As Integer

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

      ' If column is completely empty, then move everthing

      ' down one.

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

      If Not matrix(row, column) Is Nothing Then

      matrix(row, column).MarkedForDeletion = False

      End If

      Next

      Next

      End Sub

      ''' <summary>

      ''' Find out how many blocks will be eliminated.

      ''' </summary>

      ''' <returns></returns>

      ''' <remarks></remarks>

      Private Function CalculateScore() As Integer

      Dim row As Integer

      Dim column As Integer

      Dim total As Integer = 0

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

      ' If column is completely empty, then move everthing

      ' down one.

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

      If Not matrix(row, column) Is Nothing Then

      If matrix(row, column).MarkedForDeletion Then

      total += 1

      End If

      End If

      Next

      Next

      Return total

СКАЧАТЬ