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)); }
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); }
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); }