﻿Dim rPosition As Range
Public HitCount As Integer
Dim oSize As Integer
Dim m_hits As Collection

Public Property Get Position() As Range
    Set Position = rPosition
End Property
Public Property Set Position(ByVal value As Range)
    Set rPosition = value
End Property

Public Function IsHit(cell As Range, isPlayer As Boolean) As Boolean
Attribute IsHit.VB_Description = "Checks if the current move is a hit"
Attribute IsHit.VB_HelpID = 1
'Sample of attribute use on function level (show up in the objectbrowser(F2) --> Method --> Properties
   If Code.Collide(cell, Position) Then
        cell.Worksheet.Unprotect
        cell.Interior.Color = vbRed
        isHit = True
        Hits.Add cell
        If Hits.Count = Size Then
            Position.BorderAround Weight:=xlMedium
        End If
        
        If isPlayer Then
            Battleship.Cells(g_logRow, 2).value = "You get a hit on " & cell.Address & "!"
            Battleship.Names("PlayerHits").RefersToRange.value = Battleship.Names("PlayerHits").RefersToRange.value + 1
        Else
            Battleship.Cells(g_logRow, 2).value = "The Computer gets a hit on " & cell.Address
            Battleship.Names("ComputerHits").RefersToRange.value = Battleship.Names("ComputerHits").RefersToRange.value + 1
        End If
        g_logRow = g_logRow + 1
        cell.Worksheet.Protect ""
        isHit = True
   Else
        isHit = False
   End If
End Function
Public Property Get Hits() As Collection
    Set Hits = m_hits
End Property
Public Property Set Hits(ByVal value As Collection)
    Set m_hits = value
End Property
Private Sub Class_Initialize()
    HitCount = 0
    Set Hits = New Collection
End Sub
Public Property Get Size() As Integer
Size = oSize
End Property
Public Property Let Size(ByVal vNewValue As Integer)
oSize = vNewValue
End Property
