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);
        }
Esempio n. 2
0
        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 !");
        }