Code:
Public Sub CPU_Makes_Move()
   '-----------------------------------------------------------------------------
   '*Here we check for 2 or more of the player's chr on the same row or col,
   'the odds that we generate determine as to if we apply the move.
   '-----------------------------------------------------------------------------
   '//
   Dim Apply_Move As Boolean 'Allow CPU to apply calculated move if set true
   Dim i          As Long    'General working var
   Dim j          As Long    '""
   Dim CPU_Odds   As Long    'Random odds based on difficulty setting
                             '(to apply or not to apply the calulated move)
   CPU_Moved = False
   '//
               For i = 0 To (Rnd * 100) + 1
                   CPU_Odds = (Rnd * 100) 'Rnd num of samples (really scramble it)
               Next
               '//
               'chance % that CPU will make calculated move
               Select Case Game_Difficulty
                      Case 0              'Easy, 60%
                           If CPU_Odds <= 60 Then Apply_Move = True
                      Case 1              'Norm, 80%
                           If CPU_Odds <= 80 Then Apply_Move = True
                      Case 2              'hard, 95%
                           If CPU_Odds <= 95 Then Apply_Move = True
               End Select
   '//
               If Apply_Move Then         'Flag set?
   '//
   'Is there a winning possibility in the next move for CPU?
                  Call Perform_Calculated_Move(1)
   '//
   'Lets analyze player's game play, something to block?
                  If Not CPU_Moved Then
                     Call Perform_Calculated_Move(0)
                  End If
   '//
   '-----------------------------------------------------------------------------
   '(Nothing to analyze, nothing to win nor block)
   'Pick middle if empty or decide on corner to pick (depending on player's moves)
   '-----------------------------------------------------------------------------
                  If Not CPU_Moved Then
                     If Grid_Set(1, 1) = 0 Then     'Middle
                        CPU_Moved = True
                        Grid_Set(1, 1) = Players_CHR(Players_Turn)
                      
                     ElseIf Grid_Set(2, 2) = 0 Then 'Bottom right?
                        If Grid_Set(1, 2) = Players_CHR(0) Or Grid_Set(2, 1) = Players_CHR(0) Then
                           CPU_Moved = True
                           Grid_Set(2, 2) = Players_CHR(Players_Turn)
                        End If
                            
                     ElseIf Grid_Set(0, 0) = 0 Then 'Top left?
                        If Grid_Set(0, 2) <> Players_CHR(0) Then
                           CPU_Moved = True
                           Grid_Set(0, 0) = Players_CHR(Players_Turn)
                        End If
                        
                     ElseIf Grid_Set(0, 2) = 0 Then 'Top right?
                        If Grid_Set(0, 0) <> Players_CHR(0) Then
                           CPU_Moved = True
                           Grid_Set(0, 2) = Players_CHR(Players_Turn)
                        End If
                        
                     ElseIf Grid_Set(2, 0) = 0 Then 'Bottom left?
                        CPU_Moved = True
                        Grid_Set(2, 0) = Players_CHR(Players_Turn)
                     End If
                  End If
   '//
   '-----------------------------------------------------------------------------
   'Look for row / col with CPU's prior moves, then check for empty
   'col or row, if that fails look for one of player's prior moves.
   '-----------------------------------------------------------------------------
   '//
                  For j = 1 To 0 Step -1
                      If Not CPU_Moved Then
                         For i = 0 To 2
                             If Grid_Set(0, i) = Players_CHR(j) And Grid_Set(2, i) = 0 And Grid_Set(1, i) = 0 Then
                                Grid_Set(1, i) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                            
                             ElseIf Grid_Set(1, i) = Players_CHR(j) And Grid_Set(2, i) = 0 And Grid_Set(0, i) = 0 Then
                                Grid_Set(0, i) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                     
                             ElseIf Grid_Set(2, i) = Players_CHR(j) And Grid_Set(1, i) = 0 And Grid_Set(0, i) = 0 Then
                               Grid_Set(0, i) = Players_CHR(Players_Turn)
                               CPU_Moved = True
                               Exit For
                             End If
                         Next
                      End If
        '//
        'Row
                      If Not CPU_Moved Then
                         For i = 0 To 2
                             If Grid_Set(i, 0) = Players_CHR(j) And Grid_Set(i, 2) = 0 And Grid_Set(i, 1) = 0 Then
                                Grid_Set(i, 1) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                            
                             ElseIf Grid_Set(i, 1) = Players_CHR(j) And Grid_Set(i, 2) = 0 And Grid_Set(i, 0) = 0 Then
                                Grid_Set(i, 0) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                     
                             ElseIf Grid_Set(i, 2) = Players_CHR(j) And Grid_Set(i, 1) = 0 And Grid_Set(i, 0) = 0 Then
                                Grid_Set(i, 0) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                             End If
                         Next
                      End If
   '//
   'No prior CPU moves?, find empty col
                      If Not CPU_Moved Then
                         For i = 0 To 2
                             If Grid_Set(0, i) = 0 And Grid_Set(2, i) = 0 And Grid_Set(1, i) = 0 Then
                                Grid_Set(0, i) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                             End If
                         Next
                      End If
   '//
   'No empty col?, find row
                      If Not CPU_Moved Then
                         For i = 0 To 2
                             If Grid_Set(i, 0) = 0 And Grid_Set(i, 2) = 0 And Grid_Set(i, 1) = 0 Then
                                Grid_Set(i, 0) = Players_CHR(Players_Turn)
                                CPU_Moved = True
                                Exit For
                             End If
                         Next
                      End If
                  Next
               '//
               Else   'The odds are on the players side, make move by chance
               '//
   'No brainer move', (go fetch any rnd pos)
                  Call Find_Random_Spot
               End If
   '//
   Players_Turn = Players_Turn + 1                 'Player makes next turn
 Players_Turn = Players_Turn Mod 2                 'Limit val to 1, player's take successive turns
       Move_Count = Move_Count + 1                 'Keep track of moves, max of 9
                  Call Scrn_Render                 'Render graphics
                Call Check_For_Win                 'Check for wining line
End Sub