public AttackOutcome AttackOpponent(Guid boardId, AttackRequest attackRequest)
        {
            _setupValidationService.ValidateCoordinatePlacement(attackRequest.Coordinate);

            var attackCoordinate = attackRequest.Coordinate;

            var board = _boardRepository.Find(boardId);

            if (board == null)
            {
                throw new BadRequestException($"Board ID '{boardId}' was not found.");
            }
            var ships = board.Ships;

            foreach (var ship in ships)
            {
                var shipCoordinates          = CoordinateHelper.GetCoordinates(ship.TopLeftCoordinate, ship.ShipLength, ship.Alignment);
                var conflictWithExistingShip = shipCoordinates.FirstOrDefault(a => a.Equals(attackCoordinate));
                if (conflictWithExistingShip != null)
                {
                    ship.SuccessfulHits.Add(attackCoordinate);
                    return(AttackOutcome.Hit);
                }
            }
            return(AttackOutcome.Miss);
        }
Example #2
0
        public async Task <Result <IEnumerable <Party> > > RequestPartyWithFilter()
        {
            Result <IEnumerable <Party> > requestResult = new Result <IEnumerable <Party> >();

            Coordinates coordinates = await CoordinateHelper.GetCoordinates();

            try
            {
                //Format coordinates
                var uri = $"?lat={coordinates.Latitude}&lon={coordinates.Longitude}&radius={_storageService.Storage.FilterRadius}"
                          .Replace(",", "."); //Backend does not like , in the request

                requestResult =
                    await
                    _clientService.SendRequest <IEnumerable <Party> >("api/party", RestType.Get, urlQuery : uri,
                                                                      token : Token?.AccessToken);
            }
            catch (Exception e)
            {
                DebugHelper.PrintDebug(DebugType.Error, "Fetching parties failed.\n" + e);
                requestResult.RequestFailedToException = true;
            }

            await HandleCaching(requestResult, PartyListType.Local);

            //Check if the request was a success

            SetNearParties(requestResult.Data);

            return(requestResult);
        }
Example #3
0
        private async Task InitializeMapCoordinates()
        {
            var coordinates = await CoordinateHelper.GetCoordinates();

            if (coordinates != null)
            {
                MoveMapToCoordinates(coordinates);
            }
        }
        private void ShipNotConflicting(PlaceShipRequest placeShipRequest)
        {
            var newShipCoordinates = CoordinateHelper.GetCoordinates(placeShipRequest.TopLeftCoordinate, placeShipRequest.ShipLength, placeShipRequest.Alignment);

            var board = _boardRepository.Find(placeShipRequest.BoardId);
            var ships = board.Ships;

            foreach (var existingShip in ships)
            {
                var existingCoordinates      = CoordinateHelper.GetCoordinates(existingShip.TopLeftCoordinate, existingShip.ShipLength, existingShip.Alignment);
                var conflictWithExistingShip = newShipCoordinates.Any(s => existingCoordinates.Any(e => e.Equals(s)));
                if (conflictWithExistingShip)
                {
                    throw new BadRequestException("This coordinate is already occupied by an existing ship.");
                }
            }
        }