none
How do you create a 9x9 Grid on Visual Basic?

Answers

  • Ray48021,

     

    I hope the following code sample can help on your demand:

     

    Code Snippet

    'This class represents the grid of blocks. It handles most of the game play.

    Public Class Grid

        ' The grids is 12 columns and 15 rows of Block objects.

        Dim matrix(8, 8) As Block

     

        ' Creates a few rows of blocks to start the game. Game starts with Red, Blue, and Green blocks.

        'Number of rows of blocks to create to start the game.

        Public Sub New(ByVal nrows As Integer)

            If nrows > matrix.GetLength(0) Then

                Throw New Exception("Must start with " & matrix.GetLength(0) & " or fewer rows.")

            End If

            Dim row As Integer

            Dim column As Integer

            For row = 0 To nrows - 1

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

                    matrix(row, column) = New Block(New Color() {Color.Red, Color.Blue, Color.Green})

                Next

            Next

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

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

                    matrix(row, column) = Nothing

                Next

            Next

        End Sub

     

        ' A new row may be added at any time. New rows have Gray blocks in addition

        ' to Red, Blue, and Green. This makes the game more difficult.

        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

     

        'Draw the grid of blocks

        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

     

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

        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

     

     

     

    Tuesday, September 04, 2007 7:09 AM

All replies

  •  Ray48021 wrote:

    I am new to Virtual Basic. How do you create a 9x9 Grid on Visual Basic?

     

    Hi Ray,

     

    A grid of what item? Buttons? Labels, TextBoxes or something else?

     

    Are you using VB6 or earlier or VB.Net?

    An Express edition or Visual Studio standard or professional?

     

     

     

    Regards,

     

    S_DS

     

    Thursday, August 30, 2007 11:31 AM
  • I am using Visual Basic 2005 Professional Edition Version 8.0 and Microsoft Net Framework Version 2.0, I want to create 9x9Grid, Create a  single player solitaire game. Each time a player clicks on a blank button, it chooses a random color.

    Thursday, August 30, 2007 2:08 PM
  • Ray48021,

     

    I hope the following code sample can help on your demand:

     

    Code Snippet

    'This class represents the grid of blocks. It handles most of the game play.

    Public Class Grid

        ' The grids is 12 columns and 15 rows of Block objects.

        Dim matrix(8, 8) As Block

     

        ' Creates a few rows of blocks to start the game. Game starts with Red, Blue, and Green blocks.

        'Number of rows of blocks to create to start the game.

        Public Sub New(ByVal nrows As Integer)

            If nrows > matrix.GetLength(0) Then

                Throw New Exception("Must start with " & matrix.GetLength(0) & " or fewer rows.")

            End If

            Dim row As Integer

            Dim column As Integer

            For row = 0 To nrows - 1

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

                    matrix(row, column) = New Block(New Color() {Color.Red, Color.Blue, Color.Green})

                Next

            Next

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

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

                    matrix(row, column) = Nothing

                Next

            Next

        End Sub

     

        ' A new row may be added at any time. New rows have Gray blocks in addition

        ' to Red, Blue, and Green. This makes the game more difficult.

        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

     

        'Draw the grid of blocks

        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

     

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

        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

     

     

     

    Tuesday, September 04, 2007 7:09 AM
  •     ''' Find out how many blocks will be eliminated.

        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

        End Function

        ' 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.

        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

     

        'Remove all the blocks from the grid.

        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

     

     

     

    Tuesday, September 04, 2007 7:14 AM
  •  

        ' Provides access into the grid.

        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

        ''' Set MarkedForDeletion to True for each neighboring block of the same color.

        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

            ' until there are no more blocks to look at.

            While blocksToExamine.Count > 0

                FindNeighbors()

            End While

        End Sub

     

        ' Look to the blocks on each side.

        Private Sub FindNeighbors()

            ' Take the first block out of the arraylist and examine it.

            Dim location As Point = CType(blocksToExamine(0), Point)

            Dim currentBlock As Block = matrix(location.X, location.Y)

            Dim row As Integer = location.X

            Dim column As Integer = location.Y

            blocksToExamine.RemoveAt(0)

     

            Dim nextRow As Integer

            Dim nextCol As Integer

            Dim selected As Block

     

            ' look up

            If row < matrix.GetLength(0) - 1 Then

                nextRow = row + 1

                selected = matrix(nextRow, column)

                ExamineNeighbor(selected, nextRow, column, currentBlock.Color)

            End If

     

            ' look down

            If row > 0 Then

                nextRow = row - 1

                selected = matrix(nextRow, column)

                ExamineNeighbor(selected, nextRow, column, currentBlock.Color)

            End If

     

            ' look left

            If column > 0 Then

                nextCol = column - 1

                selected = matrix(row, nextCol)

                ExamineNeighbor(selected, row, nextCol, currentBlock.Color)

            End If

     

            ' look right

            If column < matrix.GetLength(1) - 1 Then

                nextCol = column + 1

                selected = matrix(row, nextCol)

                ExamineNeighbor(selected, row, nextCol, currentBlock.Color)

            End If

        End Sub

     

        ' If the neighbor is the same color, add it to the blocks to examine.

     

        Private Sub ExamineNeighbor(ByVal selected As Block, ByVal row As Integer, ByVal column As Integer, ByVal color As Color)

            If Not selected Is Nothing Then

                If selected.Color.Equals(color) Then

                    If Not selected.MarkedForDeletion Then

                        selected.MarkedForDeletion = True

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

                    End If

                End If

            End If

        End Sub

     

    End Class

     

     

     

    Tuesday, September 04, 2007 7:16 AM