Tic Tac Toe is a game played by two players on a grid of 3X3 squares. The challenge is to place three consecutive Os or Xs by one player in a row, column or diagonal. The player who does so is the winner. The game ends in a draw if all the squares are filled with Os or Xs but not in a row, column or diagonal. We will create the Tic Tac Toe Mini VB.NET Project to let you understand the concept of event handling and coding in VB.NET

Design interface of Tic Tac Toe Mini VB.NET Project

The design interface of this game is created with 9 buttons arranged in 3 rows and 3 columns. When a button is clicked by a player its colour changes according to the colour assigned to players in the labels Player1 and Player2.

Tic Tac Toe mini VBNET project interface

Controls and their names

Three labels

  • Label1- to store the array storing which player clicked which button from index 1 to 9. Its Visible property is set to false
  • Label2 – Text property Player1 and backcolor property Red
  • Label3 – Text property Player2 and backcolor property Green

Nine Buttons– Button1 to Button9

Working of Tic Tac Toe Mini VB.NET Project

When the game is executed the interface is presented to the players who can take turn to click one out of nine buttons. As soon as a button is clicked the button changes its color. When one player succeeds in drawing three consecutive buttons (row/column/diagonal) with his assigned color he is declared a winner. A message box is displayed with the player who wins.

Tic Tac Toe winner

After finishing a game the players are asked if they wish to play again. On clicking yes button the buttons are set to the basic color and the players can start again.

Tic Tac Toe again

Code Implementation

Variable declaration for Tic Tac Toe Mini VB.NET Project

 
 
   Dim player1, player2 As Boolean ‘ indicate which player has played his turn
    Dim bc() As Integer ‘ for storing which button is clicked by which players(1/2)
    Dim i As Integer ‘ counter for for loop
    Dim winn As Integer ‘ storing the player number of winner
    Dim tot As Integer 
    Dim fin As Boolean

Form load event to initialize the variables

 
 
Private Sub tictactoe_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim i As Integer
        ReDim bc(8)
        For i = 0 To 8
            bc(i) = 0
        Next
        i = 0
        tot = 0
        player1 = True
        player2 = False
        winn = 0
        fin = True
        btnRefresh.Focus()
    End Sub

Refresh Button code

 
 
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
        tttReset()
End Sub

Button1 to button 9 click are handled by one click event

 
 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click
        Dim sname As String
        Dim res
        sname = CStr(sender.name)
        i = Mid(sname, Len(sname), 1) - 1
        If player1 Then
            sender.BackColor = Color.Red
            player1 = False
            player2 = True
            bc(i) = 1
        Else
            sender.BackColor = Color.Green
            player1 = True
            player2 = False
            bc(i) = 2
        End If
        Label1.Text = ""
        For i = 0 To 8
            Label1.Text = Label1.Text + CStr(bc(i))
        Next
        'checking all rows
        If Mid(Label1.Text, 1, 3) = "111" Then
            winn = 1
        End If
        If Mid(Label1.Text, 1, 3) = "222" Then
            winn = 2
        End If
        If Mid(Label1.Text, 7, 3) = "111" Then
            winn = 1
        End If
        If Mid(Label1.Text, 7, 3) = "222" Then
            winn = 2
        End If
        If Mid(Label1.Text, 4, 3) = "111" Then
            winn = 1
        End If
        If Mid(Label1.Text, 4, 3) = "222" Then
            winn = 2
        End If
        'checking all columns
        If CStr(bc(0)) + CStr(bc(3)) + CStr(bc(6)) = "111" Then
            winn = 1
        End If
        If CStr(bc(0)) + CStr(bc(3)) + CStr(bc(6)) = "222" Then
            winn = 2
        End If
        If CStr(bc(1)) + CStr(bc(4)) + CStr(bc(7)) = "111" Then
            winn = 1
        End If
        If CStr(bc(1)) + CStr(bc(4)) + CStr(bc(7)) = "222" Then
            winn = 2
        End If
        If CStr(bc(2)) + CStr(bc(5)) + CStr(bc(8)) = "111" Then
            winn = 1
        End If
        If CStr(bc(2)) + CStr(bc(5)) + CStr(bc(8)) = "222" Then
            winn = 2
        End If
        'checking all diagonal positions
        If CStr(bc(0)) + CStr(bc(4)) + CStr(bc(8)) = "111" Then
            winn = 1
        End If
        If CStr(bc(0)) + CStr(bc(4)) + CStr(bc(8)) = "222" Then
            winn = 2
        End If
        If CStr(bc(2)) + CStr(bc(4)) + CStr(bc(6)) = "111" Then
            winn = 1
        End If
        If CStr(bc(2)) + CStr(bc(4)) + CStr(bc(6)) = "222" Then
            winn = 2
        End If
        'printing winners name and message
        If winn = 1 Or winn = 2 Then
            MessageBox.Show("Congratulations Player" & CStr(winn) & " !!! You are the winner")
            res = MsgBox("play another game", vbYesNo)
            If res = vbYes Then
                tttReset()
            Else
                Me.Close()
            End If
        Else
            For i = 0 To 8
                If bc(i) <> 0 Then
                    fin = True
                Else
                    fin = False
                End If
            Next
            If fin = True Then
                MessageBox.Show("Its a Draw")
                res = MsgBox("play another game", vbYesNo, Me.Text)
                If res = vbYes Then
                    tttReset()
                Else
                    Me.Close()
                End If
            End If
        End If
    End Sub

User define procedure to refresh the game Tic Tac Toe Mini VB.NET Project

 
 
Private Sub tttReset()
        Label1.Text = ""
        winn = 0
        tot = 0
        fin = True
        For i = 0 To 8
            bc(i) = 0
        Next
        If winn = 2 Then
            player2 = True
            player1 = False
        Else
            player1 = True
            player2 = False
        End If
        Button1.BackColor = DefaultBackColor
        Button2.BackColor = DefaultBackColor
        Button3.BackColor = DefaultBackColor
        Button4.BackColor = DefaultBackColor
        Button5.BackColor = DefaultBackColor
        Button6.BackColor = DefaultBackColor
        Button7.BackColor = DefaultBackColor
        Button8.BackColor = DefaultBackColor
        Button9.BackColor = DefaultBackColor
End Sub