| Dim possibleCells As Collection | 
 | Dim Hits As Range | 
 | Public Sub Init() | 
 |     Dim b As Range | 
 |     Dim col As Integer, row As Integer | 
 |          | 
 |     Set possibleCells = New Collection | 
 |     Set b = Battleship.Range(board2) | 
 |     For col = 1 To b.Columns.Count | 
 |         For row = 1 To b.Rows.Count | 
 |             possibleCells.Add (b.Cells(row, col).Address) | 
 |         Next | 
 |     Next | 
 | End Sub | 
 | Public Sub Move() | 
 |     Dim index As Integer | 
 |     index = -1 | 
 |     Dim oShip As Ship | 
 |     Dim isHit As Boolean | 
 |     For Each oShip In g_userShips | 
 |         If oShip.Hits.Count > 0 And oShip.Hits.Count < oShip.Position.Cells.Count Then | 
 |             index = GetHit(oShip) | 
 |             Exit For | 
 |         End If | 
 |     Next | 
 |      | 
 |     If index < 0 Then | 
 |         index = (Rnd * (possibleCells.Count - 1)) + 1 | 
 |     End If | 
 |     Dim cell As Range | 
 |     Set cell = Battleship.Range(possibleCells(index)) | 
 |     isHit = False | 
 |     SetHit cell | 
 |     For Each oShip In g_userShips | 
 |         If oShip.isHit(cell, False) Then | 
 |             If CheckWinner(g_userShips) Then | 
 |                 SetShipsVisible | 
 |                 MsgBox "Computer wins!" | 
 |                 Exit Sub | 
 |             End If | 
 |             isHit = True | 
 |             Exit For | 
 |         End If | 
 |     Next | 
 |  | 
 |     If IsHit = False Then | 
 |         Battleship.Unprotect | 
 |         Battleship.Cells(g_logRow, 2).value = "The Computer gets a miss on " & cell.Address | 
 |         Battleship.Names("ComputerMisses").RefersToRange.value = Battleship.Names("ComputerMisses").RefersToRange.value + 1 | 
 |         g_logRow = g_logRow + 1 | 
 | 		Battleship.Protect "" | 
 |     End If | 
 |     possibleCells.Remove index | 
 | End Sub | 
 |  | 
 | Private Sub SetShipsVisible() | 
 |     Battleship.Unprotect | 
 |     Dim oShip As Ship | 
 |     For Each oShip In g_Ships | 
 |         Dim cell As Range | 
 |         For Each cell In oShip.Position.Cells | 
 |             If cell.Interior.Color <> ColorConstants.vbRed Then | 
 |                 cell.Interior.Color = ColorConstants.vbBlack | 
 |             End If | 
 |         Next | 
 |     Next | 
 |     Battleship.Protect "" | 
 | End Sub | 
 | Private Function GetHit(oShip As Ship) As Integer | 
 |     Dim isHorizontal As Boolean | 
 |     If oShip.Hits.Count = 1 Then | 
 |         isHorizontal = Int((Rnd * 2)) = 1 | 
 |     Else | 
 |         If oShip.Hits(1).row = oShip.Hits(2).row Then | 
 |             isHorizontal = True | 
 |         Else | 
 |             isHorizontal = False | 
 |         End If | 
 |     End If | 
 |      | 
 |     Dim index As Integer | 
 |     index = -1 | 
 |     While index = -1 | 
 |         If isHorizontal Then | 
 |             For Each Hit In oShip.Hits | 
 |                 index = FindPossible(Hit.Offset(0, -1)) | 
 |                 If index = -1 Then | 
 |                     index = FindPossible(Hit.Offset(0, 1)) | 
 |                     If index <> -1 Then | 
 |                         Exit For | 
 |                     End If | 
 |                 Else | 
 |                     Exit For | 
 |                 End If | 
 |             Next | 
 |             If index = -1 Then | 
 |                 isHorizontal = False | 
 |             End If | 
 |         Else | 
 |             For Each Hit In oShip.Hits | 
 |                 index = FindPossible(Hit.Offset(-1, 0)) | 
 |                 If index = -1 Then | 
 |                     index = FindPossible(Hit.Offset(1, 0)) | 
 |                     If index > -1 Then | 
 |                         Exit For | 
 |                     End If | 
 |                 Else | 
 |                     Exit For | 
 |                 End If | 
 |             Next | 
 |             If index = -1 Then | 
 |                 isHorizontal = True | 
 |             End If | 
 |         End If | 
 |     Wend | 
 |     GetHit = index | 
 | End Function | 
 | Private Function FindPossible(r As Range) | 
 | Dim index As Integer | 
 | Dim cell As Range | 
 | For index = 1 To possibleCells.Count | 
 |     If possibleCells(index) = r.Address Then | 
 |         FindPossible = index | 
 |         Exit Function | 
 |     End If | 
 | Next | 
 | FindPossible = -1 | 
 | End Function |