public void BattleShipGame_ShipShouldSink_WhenShotLastGridPoint() { // Arrange var ship = new Mock <IShip>(); var gridPoint = new Mock <IGridPoint>(); gridPoint.SetupGet(x => x.X).Returns(0); gridPoint.SetupGet(x => x.Y).Returns(0); ship.SetupGet(x => x.Body).Returns(new[] { gridPoint.Object }); ship.SetupGet(x => x.IsDead).Returns(true); _grid.SetupGet(x => x.UsedGridPoints).Returns(new[] { gridPoint.Object }); _grid.SetupGet(x => x.Ships).Returns(new[] { ship.Object }); var shipSunk = false; _game.ShipSunk += (sender, e) => { shipSunk = true; }; // Act _game.MakeShot(0, 0); // Assert Assert.IsTrue(shipSunk); }
static void Main(string[] args) { var gameSize = 10; var grid = new Grid.Grid(gameSize); var game = new BattleShipsGame(grid); game.ShipSunk += ShipShunk; game.MissedShot += MissShot; game.ShipHit += ShipHit; //TODO: read ships size from the configuration file game.TryAddShip(ShipType.Destroyer, 4); game.TryAddShip(ShipType.Destroyer, 4); game.TryAddShip(ShipType.Battleship, 5); _viewAdapter = new ViewAdapter(gameSize); while (!game.IsGameFinished) { try { Console.WriteLine(_viewAdapter.ToString()); Console.WriteLine("Provide position to shoot"); var position = Console.ReadLine(); InputInterpreter.InterpretCell(position, out int rowNumber, out int columnNumber); Console.WriteLine($"Shooting position: {position}."); _lastShotPointRow = rowNumber; _lastShotPointColumn = columnNumber; game.MakeShot(rowNumber, columnNumber); } catch (Exception ex) { Console.WriteLine(ex.Message); } } Console.WriteLine("Game finished !"); }