public void MapShip(Ship ship)
        {
            if (ship.orientation == Orientation.Horizontal)
            {
                for (int i = 0; i < ship.length; i++)
                {
                    var row = ship.row;
                    var col = ship.col + i;

                    var position = new BattleshipsPosition(row, col);

                    shipMap[position] = ship;
                }
            }
            else
            {
                for (int i = 0; i < ship.length; i++)
                {
                    var row = ship.row + i;
                    var col = ship.col;

                    var position = new BattleshipsPosition(row, col);

                    shipMap[position] = ship;
                }
            }
        }
        public MoveConsequence Hit(BattleshipsPosition move)
        {
            if (SquareAlreadyHit(move.row, move.col))
            {
                return(MoveConsequence.Illegal);
            }

            if (shipMap.TryGetValue(move, out var hitShip) && hitShip != null)
            {
                hitShip.hit();

                _grid[move.row, move.col].State = SquareState.Hit;

                if (hitShip.IsSunk())
                {
                    return(MoveConsequence.HitSink);
                }

                return(MoveConsequence.Hit);
            }
            else
            {
                _grid[move.row, move.col].State = SquareState.Missed;

                return(MoveConsequence.Miss);
            }
        }
        public MoveConsequence Move(BattleshipsPosition move)
        {
            var defendingPlayer = nextTurnPlayer == -1 ? p1 : p2;

            var result = defendingPlayer.RegisterHit(move);

            if (result != MoveConsequence.Illegal)
            {
                nextTurnPlayer *= -1;
            }

            return(result);
        }
 public MoveConsequence RegisterHit(BattleshipsPosition move)
 {
     return(Board.Hit(move));
 }