Example #1
0
        public void UpdateGameStatus(IList <string> gameStatusList, string person, ShootResultDTO shootResult, IGame game)
        {
            if (shootResult == null)
            {
                throw new GameArgumentException("Parameter is null", nameof(shootResult));
            }
            if (game == null)
            {
                throw new GameArgumentException("Parameter is null", nameof(game));
            }
            if (gameStatusList == null)
            {
                gameStatusList = new List <string>();
            }

            var shotCoordinate    = new Coordinate(shootResult.PositionX, shootResult.PositionY);
            var boardShotPosition = Coordinate.GetBoardPosition(shotCoordinate);

            gameStatusList.Add($"{person} shot position ({boardShotPosition})");
            gameStatusList.Add(shootResult.IsShipHit ? "Hit!" : "Missed");

            if (shootResult.IsShipSunk)
            {
                gameStatusList.Add("Ship is sunk!");
                if (game.IsWon)
                {
                    gameStatusList.Add("You sunk all opponents ships, you won!");
                }
                else if (game.IsLost)
                {
                    gameStatusList.Add("Opponent sunk all your ships, you lost");
                }
            }
        }
        public void UpdateGameStatus_ShootResultIsNull_ThrowsException()
        {
            var            gameStatusUpdater = CreateGameStatusUpdater();
            var            gameStatusList    = new List <string>();
            string         person            = "";
            ShootResultDTO shootResult       = null;

            Assert.Throws <GameArgumentException>(() => gameStatusUpdater.UpdateGameStatus(
                                                      gameStatusList,
                                                      person,
                                                      shootResult,
                                                      mockGame.Object));
        }
Example #3
0
        public void MakePlayerMovement_ReturnsExpectedShootResult([Values] bool isHit, [Values] bool isSunk)
        {
            var expectedResult = new ShootResultDTO()
            {
                IsShipHit = isHit, IsShipSunk = isSunk
            };

            mockBoardComputer.Setup(x => x.Shoot(It.IsAny <int>(), It.IsAny <int>())).Returns(expectedResult);
            game = new Game(new IShip[] { mockShip.Object }, mockBoardFactory.Object, mockDifficultyLevel.Object);

            var result = game.MakePlayerMovement(0, 0);

            Assert.AreEqual(expectedResult, result);
        }
        public void UpdateGameStatus_ShipIsSunk_GameStatusListContainsThreeElements()
        {
            var            gameStatusUpdater = CreateGameStatusUpdater();
            var            gameStatusList    = new List <string>();
            string         person            = "";
            ShootResultDTO shootResult       = new ShootResultDTO()
            {
                PositionX = It.IsAny <int>(), PositionY = It.IsAny <int>(), IsShipSunk = true
            };

            gameStatusUpdater.UpdateGameStatus(
                gameStatusList,
                person,
                shootResult,
                mockGame.Object);

            Assert.AreEqual(3, gameStatusList.Count);
        }
        public void UpdateGameStatus_ShipIsSunkGameIsWon_GameStatusListContainsFourElements()
        {
            var            gameStatusUpdater = CreateGameStatusUpdater();
            var            gameStatusList    = new List <string>();
            string         person            = "";
            ShootResultDTO shootResult       = new ShootResultDTO()
            {
                PositionX = It.IsAny <int>(), PositionY = It.IsAny <int>(), IsShipSunk = true
            };

            mockGame.Setup(x => x.IsWon).Returns(true);

            gameStatusUpdater.UpdateGameStatus(
                gameStatusList,
                person,
                shootResult,
                mockGame.Object);

            Assert.AreEqual(4, gameStatusList.Count);
        }
Example #6
0
        public ShootResultDTO Shoot(int positionX, int positionY)
        {
            ShootResultDTO result = new ShootResultDTO()
            {
                PositionX = positionX, PositionY = positionY
            };
            var hit = Fields[positionX, positionY].Shoot();

            if (hit)
            {
                IShip shipHit = Ships.SingleOrDefault(x => x.TryToShoot(positionX, positionY));
                if (shipHit != null)
                {
                    result.IsShipHit  = true;
                    result.IsShipSunk = shipHit.IsSunk;
                }
                else
                {
                    throw new GameLogicalException("Inconsistent fields on board and ships");
                }
            }
            return(result);
        }