| Public Const board1 = "{5}" | 
 | Public Const board2 = "{6}" | 
 |  | 
 | Public Const userShip1 = "{0}" | 
 | Public Const userShip2 = "{1}" | 
 | Public Const userShip3 = "{2}" | 
 | Public Const userShip4 = "{3}" | 
 | Public Const userShip5 = "{4}" | 
 |  | 
 | Global g_logRow As Integer | 
 | Global g_gameEnded As Boolean | 
 | Global g_Ships As Collection | 
 | Global g_userShips As Collection | 
 | Public Function Collide(r1 As Range, r2 As Range) As Boolean | 
 | If r1.row + r1.Rows.Count > r2.row And r1.row < r2.row + r2.Rows.Count And _ | 
 |       r1.column + r1.Columns.Count > r2.column And r1.column < r2.column + r2.Columns.Count Then | 
 |       Collide = True | 
 | Else | 
 |     Collide = False | 
 | End If | 
 | End Function | 
 | Public Sub AddShips(board As Range) | 
 |     Set g_Ships = New Collection | 
 |      | 
 |     Dim s1 As New Ship | 
 |      | 
 |     s1.Size = 5 | 
 |     Set s1.Position = GetShipPos(board, s1.Size) | 
 |     g_Ships.Add s1, "carrier" | 
 |      | 
 |     Dim s2 As New Ship | 
 |     s2.Size = 4 | 
 |     Set s2.Position = GetShipPos(board, s2.Size) | 
 |     g_Ships.Add s2, "battleship" | 
 |  | 
 |     Dim s3 As New Ship | 
 |     s3.Size = 3 | 
 |     Set s3.Position = GetShipPos(board, s3.Size) | 
 |     g_Ships.Add s3, "sub" | 
 |  | 
 |     Dim s4 As New Ship | 
 |     s4.Size = 3 | 
 |     Set s4.Position = GetShipPos(board, s4.Size) | 
 |     g_Ships.Add s4, "cruiser" | 
 |  | 
 |     Dim s5 As New Ship | 
 |     s5.Size = 2 | 
 |     Set s5.Position = GetShipPos(board, s5.Size) | 
 |     g_Ships.Add s5, "destroyer" | 
 | End Sub | 
 | Public Sub AddUserShips(board As Range) | 
 |     Set g_userShips = New Collection | 
 |      | 
 |     Dim s1 As New Ship | 
 |      | 
 |     s1.Size = 5 | 
 |     Set s1.Position = Battleship.Range(userShip1) | 
 |     g_userShips.Add s1, "carrier" | 
 |      | 
 |     Dim s2 As New Ship | 
 |     s2.Size = 4 | 
 |     Set s2.Position = Battleship.Range(userShip2) | 
 |     g_userShips.Add s2, "battleship" | 
 |  | 
 |     Dim s3 As New Ship | 
 |     s3.Size = 3 | 
 |     Set s3.Position = Battleship.Range(userShip3) | 
 |     g_userShips.Add s3, "sub" | 
 |  | 
 |     Dim s4 As New Ship | 
 |     s4.Size = 3 | 
 |     Set s4.Position = Battleship.Range(userShip4) | 
 |     g_userShips.Add s4, "cruiser" | 
 |  | 
 |     Dim s5 As New Ship | 
 |     s5.Size = 2 | 
 |     Set s5.Position = Battleship.Range(userShip5) | 
 |     g_userShips.Add s5, "destroyer" | 
 | End Sub | 
 | Public Function GetShipPos(board As Range, ByVal Size As Integer) As Range | 
 |     Dim row As Integer, column As Integer | 
 |     Dim Horizontal As Integer | 
 |      | 
 |     Do | 
 |         Randomize | 
 |         row = (Rnd * (board.Rows.Count - 1)) + 1 | 
 |         column = (Rnd * (board.Rows.Count - 1)) + 1 | 
 |         Horizontal = Rnd | 
 |      | 
 |         If Horizontal = 1 Then | 
 |             If column - Size > 0 And column + Size < 10 Then | 
 |                 If Rnd = 0 Then | 
 |                         Set GetShipPos = board.Range(Cells(row, column), Cells(row, column + Size - 1)) | 
 |                 Else | 
 |                         Set GetShipPos = board.Range(Cells(row, column - Size + 1), Cells(row, column)) | 
 |                 End If | 
 |             ElseIf column - Size > 0 Then | 
 |                 Set GetShipPos = board.Range(Cells(row, column - Size + 1), Cells(row, column)) | 
 |             Else | 
 |                 Set GetShipPos = board.Range(Cells(row, column), Cells(row, column + Size - 1)) | 
 |             End If | 
 |         Else | 
 |             If row - Size > 0 And row + Size < 10 Then | 
 |                 If Rnd = 0 Then | 
 |                         Set GetShipPos = board.Range(Cells(row, column), Cells(row + Size - 1, column)) | 
 |                 Else | 
 |                         Set GetShipPos = board.Range(Cells(row - Size + 1, column), Cells(row, column)) | 
 |                 End If | 
 |             ElseIf row - Size > 0 Then | 
 |                 Set GetShipPos = board.Range(Cells(row - Size + 1, column), Cells(row, column)) | 
 |             Else | 
 |                 Set GetShipPos = board.Range(Cells(row, column), Cells(row + Size - 1, column)) | 
 |             End If | 
 |         End If | 
 |     Loop Until ValidSpot(GetShipPos) | 
 | End Function | 
 | 'Make sure the spot isn't occupied | 
 | Private Function ValidSpot(r As Range) As Boolean | 
 |     Dim oShip As Ship | 
 |     For Each oShip In g_Ships | 
 |         If Code.Collide(r, oShip.Position) Then | 
 |             ValidSpot = False | 
 |             Exit Function | 
 |         End If | 
 |     Next | 
 |     ValidSpot = True | 
 | End Function | 
 |  | 
 | Public Sub SetHit(Target As Range) | 
 |     Target.Worksheet.Unprotect | 
 |     With Target.Borders(xlDiagonalDown) | 
 |      .LineStyle = xlContinuous | 
 |      .Color = ColorConstants.vbBlack | 
 |      .TintAndShade = 0 | 
 |      .Weight = xlMedium | 
 |     End With | 
 |     With Target.Borders(xlDiagonalUp) | 
 |      .LineStyle = xlContinuous | 
 |      .Color = ColorConstants.vbBlack | 
 |      .TintAndShade = 0 | 
 |      .Weight = xlMedium | 
 |     End With | 
 |     Target.Worksheet.Protect "" | 
 | End Sub | 
 | Public Function CheckWinner(ships As Collection) As Boolean | 
 |     Dim oShip As Ship | 
 |     For Each oShip In ships | 
 |         If oShip.Hits.Count < oShip.Position.Cells.Count Then | 
 |             CheckWinner = False | 
 |             Exit Function | 
 |         End If | 
 |     Next | 
 |     CheckWinner = True | 
 | End Function |