private bool CheckNoCollision(Battleship ship) { var positions = Ships.SelectMany(s => s.ShipParts).Select(p => p.Position); var collisionPoints = positions.Where(p => ship.ShipParts.Select(s => s.Position).Contains(p)); return(!collisionPoints.Any()); }
public void ShouldCreateCorrectShipParts_Vertical() { var startPosition = new Position() { X = 0, Y = 0 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Vertical, 5); battleship.ShipParts.Count.Should().Be(5); var positions = battleship.ShipParts.Select(s => s.Position).ToList(); positions[0].Should().Be(new Position { X = 0, Y = 0 }); positions[1].Should().Be(new Position { X = 0, Y = 1 }); positions[2].Should().Be(new Position { X = 0, Y = 2 }); positions[3].Should().Be(new Position { X = 0, Y = 3 }); positions[4].Should().Be(new Position { X = 0, Y = 4 }); }
public void ShipToBigToFitIntoBoard() { var startPosition = new Position() { X = 0, Y = 0 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Horizontal, 11); Assert.Throws <InvalidRequestException>(() => _board.AddBattleship(battleship)); }
public void ShouldAddAShipSuccessfully() { var startPosition = new Position() { X = 1, Y = 1 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Horizontal, 3); var ship = _board.AddBattleship(battleship); ship.Id.Should().Be(1); }
private bool CheckBatteshipFitIntoBoard(Battleship ship) { if (ship.ShipParts.Select(p => p.Position.X).Max() >= Width) { return(false); } if (ship.ShipParts.Select(p => p.Position.Y).Max() >= Height) { return(false); } return(true); }
public void AttackedAndBeingHit() { var startPosition = new Position() { X = 1, Y = 1 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Vertical, 5); battleship.Attacked(new Position { X = 1, Y = 5 }).Should().BeTrue(); }
public void AttackedAndMissed() { var startPosition = new Position() { X = 0, Y = 0 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Vertical, 5); battleship.Attacked(new Position { X = 1, Y = 1 }).Should().BeFalse(); }
public Battleship AddShipToBoard(int boardId, Battleship ship) { lock (_lock) { var board = _boards.FirstOrDefault(b => b.Id == boardId); if (board == null) { throw new InvalidRequestException("Wrong board id; the specified board could not be found."); } board.AddBattleship(ship); return(ship); } }
public void SecondShipCollideWithFirstShip() { var startPosition = new Position() { X = 0, Y = 0 }; var battleship1 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Horizontal, 5); var battleship2 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Vertical, 5); var ship = _board.AddBattleship(battleship1); ship.Id.Should().Be(1); Assert.Throws <ShipCollisionException>(() => _board.AddBattleship(battleship2)); }
public void ShipTooBigToAddToTheBoard() { var board = _provider.CreateBoard(new Board { Height = 10, Width = 20 }); board.Id.Should().Be(1); var startPosition1 = new Position() { X = 0, Y = 0 }; var battleship1 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition1, Orientation.Horizontal, 21); Assert.Throws <InvalidRequestException>(() => board.AddBattleship(battleship1)); board.Ships.Count.Should().Be(0); }
public void ShouldCreateCorrectShipParts_Horizontal() { var startPosition = new Position() { X = 1, Y = 1 }; var battleship = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition, Orientation.Horizontal, 3); battleship.ShipParts.Count.Should().Be(3); var positions = battleship.ShipParts.Select(s => s.Position).ToList(); positions[0].Should().Be(new Position { X = 1, Y = 1 }); positions[1].Should().Be(new Position { X = 2, Y = 1 }); positions[2].Should().Be(new Position { X = 3, Y = 1 }); }
public Battleship AddBattleship(Battleship ship) { // Check battleship size var fitBoardSize = CheckBatteshipFitIntoBoard(ship); if (!fitBoardSize) { throw new InvalidRequestException("The battleship can not fit into the specified board"); } // Detect if the ship has collision with existing ships on the board var noCollision = CheckNoCollision(ship); if (!noCollision) { throw new ShipCollisionException(); } ship.Id = Ships.Count + 1; Ships.Add(ship); return(ship); }
public void SecondShipCollideWIthTheFirst() { var board = _provider.CreateBoard(new Board { Height = 10, Width = 20 }); board.Id.Should().Be(1); var startPosition1 = new Position() { X = 1, Y = 1 }; var battleship1 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition1, Orientation.Horizontal, 5); board.AddBattleship(battleship1); board.Ships.Count.Should().Be(1); var startPosition2 = new Position() { X = 2, Y = 0 }; var battleship2 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition1, Orientation.Vertical, 5); Assert.Throws <ShipCollisionException>(() => board.AddBattleship(battleship2)); board.Ships.Count.Should().Be(1); }
public void ShouldAddTwoShipsToTheBoard() { var board = _provider.CreateBoard(new Board { Height = 10, Width = 20 }); board.Id.Should().Be(1); var startPosition1 = new Position() { X = 0, Y = 0 }; var battleship1 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition1, Orientation.Horizontal, 5); board.AddBattleship(battleship1); board.Ships.Count.Should().Be(1); var startPosition2 = new Position() { X = 5, Y = 0 }; var battleship2 = new OfxCodeExercise.Battleship.Lib.Battleship(1, startPosition2, Orientation.Horizontal, 5); board.AddBattleship(battleship2); board.Ships.Count.Should().Be(2); }