示例#1
0
        public void Build_InputShip_ReturnsShipRelativeCells(Ship ship, List <Cell> expectedResult)
        {
            var shipBuilder = new ShipBuilder();

            var result = shipBuilder.Build(ship);

            Assert.That(result, Is.EqualTo(expectedResult));
        }
示例#2
0
    public static bool TryBuild(this Enemy me)
    {
        ShipBuilder builder = me.GetComponent <ShipBuilder> ();

        if (!builder)
        {
            return(false);
        }
        builder.Build();
        return(true);
    }
示例#3
0
    protected void Awake()
    {
        ShipBuilder builder = GetComponent <ShipBuilder> ();

        if (builder)
        {
            builder.Build();
        }
        m_Animator     = GetComponentInChildren <Animator> ();
        m_Health       = GetComponent <Health> ();
        m_Sprite       = GetComponentInChildren <SpriteRenderer> ();
        m_InitialColor = m_Sprite.color;
    }
示例#4
0
        public void Add(ShipBuilder shipBuilder)
        {
            var ship = shipBuilder.Build();

            foreach (var s in ships.Where(x => x.Player == ship.Player).ToList())
            {
                if (s.Collide(ship))
                {
                    throw new Exception();
                }
            }
            ships.Add(ship);
            this.Subscribe(new BattleShipWoundedObserver(ship));
        }
        private void RegisterSunkenShip(ShipKind sunkenShipKind)
        {
            var shipBuilder = new ShipBuilder(sunkenShipKind).WithSquares(GridSquareStatus.Hit);
            var ship        = shipBuilder.Build();

            for (var index = 0; index < ship.Squares.Length - 1; index++)
            {
                IGridSquare shipSquare = ship.Squares[index];
                _strategy.RegisterShotResult(shipSquare.Coordinate, ShotResult.CreateHit(ship, true));
            }

            shipBuilder.WithHasSunk(true);
            _strategy.RegisterShotResult(ship.Squares[ship.Kind.Size - 1].Coordinate, ShotResult.CreateHit(ship, true));
        }
示例#6
0
        private void RegisterSunkenShip(ShipKind sunkenShipKind, GridCoordinate[] coordinates)
        {
            // Get ship squares
            IGridSquare[] squares = coordinates.Select(c =>
            {
                GridSquare square = new GridSquare(c);
                square.Status     = GridSquareStatus.Hit;
                return(square);
            }).ToArray();
            var shipBuilder = new ShipBuilder(sunkenShipKind).WithSquares(squares);
            var ship        = shipBuilder.Build();

            for (var index = 0; index < ship.Squares.Length - 1; index++)
            {
                IGridSquare shipSquare = ship.Squares[index];
                _strategy.RegisterShotResult(shipSquare.Coordinate, ShotResult.CreateHit(ship, true));
            }

            shipBuilder.WithHasSunk(true);
            _strategy.RegisterShotResult(ship.Squares[ship.Kind.Size - 1].Coordinate, ShotResult.CreateHit(ship, true));
        }
        private void DetectSunkenShipsVertically()
        {
            for (int j = 0; j < _grid.Size; j++)
            {
                for (int i = 0; i < _grid.Size; i++)
                {
                    if (_grid.Squares[i, j].Status == GridSquareStatus.Hit)
                    {
                        int topIndex = i;
                        while (i < _grid.Size && _grid.Squares[i, j].Status == GridSquareStatus.Hit)
                        {
                            i++;
                        }

                        int bottomIndex = i - 1;
                        if (bottomIndex > topIndex)
                        {
                            var kind        = ShipKind.All.First(kind => kind.Size == bottomIndex - topIndex + 1);
                            var shipBuilder = new ShipBuilder(kind);
                            var ship        = shipBuilder.Build();

                            IList <IGridSquare> shipSquares = new List <IGridSquare>();
                            for (var index = topIndex; index < bottomIndex; index++)
                            {
                                shipSquares.Add(_grid.Squares[index, j]);
                                _strategy.RegisterShotResult(_grid.Squares[index, j].Coordinate,
                                                             ShotResult.CreateHit(ship, true));
                            }

                            shipSquares.Add(_grid.Squares[bottomIndex, j]);

                            shipBuilder.WithSquares(shipSquares.ToArray());
                            shipBuilder.WithHasSunk(true);
                            _strategy.RegisterShotResult(_grid.Squares[bottomIndex, j].Coordinate,
                                                         ShotResult.CreateHit(ship, true));
                        }
                    }
                }
            }
        }
        public void GivenShipRequestsReturnShips()
        {
            var builder = new ShipBuilder();

            var ships = builder.Build(new[] {
                new ShipRequest
                {
                    Type     = "Battleship",
                    Size     = 5,
                    Quantity = 1
                },
                new ShipRequest
                {
                    Type     = "Destroyer",
                    Size     = 4,
                    Quantity = 2
                },
            });

            ships.Where(x => x.Type == "Battleship").Should().HaveCount(1);
            ships.Where(x => x.Type == "Destroyer").Should().HaveCount(2);
        }
        private void DetectSunkenShipsHorizontally()
        {
            for (int i = 0; i < _grid.Size; i++)
            {
                for (int j = 0; j < _grid.Size; j++)
                {
                    if (_grid.Squares[i, j].Status == GridSquareStatus.Hit)
                    {
                        int leftIndex = j;
                        while (j < _grid.Size && _grid.Squares[i, j].Status == GridSquareStatus.Hit)
                        {
                            j++;
                        }

                        int rightIndex = j - 1;
                        if (rightIndex > leftIndex)
                        {
                            var kind        = ShipKind.All.First(kind => kind.Size == rightIndex - leftIndex + 1);
                            var shipBuilder = new ShipBuilder(kind);
                            var ship        = shipBuilder.Build();
                            IList <IGridSquare> shipSquares = new List <IGridSquare>();
                            for (var index = leftIndex; index < rightIndex; index++)
                            {
                                shipSquares.Add(_grid.Squares[i, index]);
                                _strategy.RegisterShotResult(_grid.Squares[i, index].Coordinate,
                                                             ShotResult.CreateHit(ship, true));
                            }

                            shipSquares.Add(_grid.Squares[i, rightIndex]);
                            shipBuilder.WithSquares(shipSquares.ToArray());
                            shipBuilder.WithHasSunk(true);
                            _strategy.RegisterShotResult(_grid.Squares[i, rightIndex].Coordinate,
                                                         ShotResult.CreateHit(ship, true));
                        }
                    }
                }
            }
        }