public void CreateRobot() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); Assert.IsNotNull(robot); }
static void Main(string[] args) { var grid = new GridMap { MaxRows = 10, MaxCols = 10 }; //Create Obstructions map grid.CreateGridTopographyManually(); grid.Display(); IRobot rob1 = new SimpleRobot(1, 0, 0, 'N', grid); IRobot rob2 = new SimpleRobot(2, 2, 3, 'N', grid); grid.RobotsInGrid = new List <SimpleRobot> { (SimpleRobot)rob1, (SimpleRobot)rob2 }; rob1.Display(); // Series of Input commands string command = "LFFRRRFFLR"; rob1.Navigate(command); rob2.Display(); rob2.Navigate(command); }
/// <summary> /// 获取起始点和终止点 /// </summary> /// <param name="pngPath"></param> /// <returns></returns> private bool TryAutoExcute(string pngPath) { if (!isAuto) { return(false); } using (var bmp = new Bitmap(pngPath)) { try { AddLogAsync("尝试解析小人起点和目标落点..."); var result = new SimpleRobot().GetNextTap(bmp); AddLogAsync("解析成功..."); ExcuteSwipe(result.Duration); this.Invoke(new Action(() => { pictureBox1.Image = new Bitmap(bmp); })); return(true); } catch (Exception ex) { AddLogAsync("自动捕获出现异常:" + ex.ToString()); AddLogAsync("请人工辅助操作。"); AddLogAsync("左键单击小人底部,再右键单击目标落点即可。"); isAuto = false; return(false); } } }
public void Status_ByDefault_IsNormal() { // Arrange SimpleRobot sut = CreateSut(); // Assert sut.Status.Should().Be(Status.Normal); }
public void SetLastPosition_IfMovesOverEdge_SetsStatusToLost() { // Arrange SimpleRobot sut = CreateSut(); // Act sut.LastPosition = outerPosition; // Assert sut.Status.Should().Be(Status.Lost); }
public void SetLastPosition_IfMovesOverEdge_AddsScentPosition() { // Arrange SimpleRobot sut = CreateSut(); // Act sut.LastPosition = outerPosition; // Assert sut.Area.ScentPosition.Should().Equal(outerPosition); }
public void MoveRight() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); robot.Move('R'); var newPoint = robot.GetLocation(); Assert.AreEqual(1, newPoint.XPoint); Assert.AreEqual(0, newPoint.YPoint); }
public void SetLastPosition_WithArea_DoesNotThrow() { // Arrange SimpleRobot sut = CreateSut(); // Act Action act = () => sut.LastPosition = defaultPosition; // Assert act.Should().NotThrow(); }
public void RobotDoNotMove_InvalidInstruction() { //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); rob.Move('s'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'N'); }
public void SetLastPosition_IfDoesNotMoveOverEdge_DoesNotAddScentPosition() { // Arrange SimpleRobot sut = CreateSut(); // Act sut.LastPosition = innerPosition; // Assert sut.Area.ScentPosition.Should().BeEmpty(); }
public void TestXBoundry0() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); //try to move left from 0,0: make sure we stay there robot.Move('L'); var newPoint = robot.GetLocation(); Assert.AreEqual(0, newPoint.XPoint); Assert.AreEqual(0, newPoint.YPoint); }
public void TestHole() { var point = new Point(4, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); _holder.SetObstacle(4, 2, new Hole(3, 2)); robot.Move('F'); robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(3, newPoint.XPoint); Assert.AreEqual(2, newPoint.YPoint); }
public void TestSpinner() { var point = new Point(2, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); _holder.SetObstacle(2, 1, new Spinner(true, 1)); robot.Move('F'); robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(3, newPoint.XPoint); Assert.AreEqual(1, newPoint.YPoint); }
public void TestYBoundry0() { var point = new Point(0, 0); //set init direction to south (2) var robot = new SimpleRobot(point, 2, _holder, 5, 5); //move F, make sure we stay @ 00 robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(0, newPoint.XPoint); Assert.AreEqual(0, newPoint.YPoint); }
public void RobotDoNotMove_RockOrUnkownOrBorder() { //Test rock in Front //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); //rock at (9,9) , Do not move Front grid.Topography[9, 9] = new Rock() { ObsPosition = new int[] { 9, 9 } }; rob.Move('F'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'N'); //Test Unknown on Left //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); //Unknown at (8,8) , Do not move to Left grid.Topography[8, 8] = new Unknown() { ObsPosition = new int[] { 8, 8 } }; rob.Move('L'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'N'); //Test On the border //robot at (19,18) 'N' //Out of bouds on Move to Right : Do Not Move rob = new SimpleRobot(1, 19, 18, 'N', grid); rob.Move('R'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 19); Assert.AreEqual(newPoint[1], 18); Assert.AreEqual(rob.GetDirection(), 'N'); //robot at (19,19) 'N' //Move Front / Left / Right Do not move rob = new SimpleRobot(1, 19, 19, 'N', grid); rob.Move('F'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 19); Assert.AreEqual(newPoint[1], 19); Assert.AreEqual(rob.GetDirection(), 'N'); }
public RobotMovesTest() { grid = new GridMap() { MaxRows = 20, MaxCols = 20 }; Assert.IsNotNull(grid); rob = new SimpleRobot(1, 9, 8, 'N', grid); Assert.IsNotNull(rob); grid.RobotsInGrid = new List <SimpleRobot> { rob }; grid.CreateGridTopographyManually(); }
public void SetLastPosition_WithoutArea_Throws() { // Arrange SimpleRobot sut = CreateSut(); sut.Area = null; // Act Action act = () => sut.LastPosition = defaultPosition; // Assert act.Should().Throw <InvalidOperationException>() .WithMessage($"Can not set position without area."); }
public void SetLastPosition_IfDoesNotMoveOverEdge_ChangesLastPosition() { // Arrange SimpleRobot sut = CreateSut(); // Act Position start = sut.LastPosition; sut.LastPosition = innerPosition; // Assert sut.LastPosition.Should().Be(innerPosition); sut.LastPosition.Should().NotBe(start); }
public void SetLastPosition_IfMovesOverEdge_DoesNotChangeLastPosition() { // Arrange SimpleRobot sut = CreateSut(); // Act Position start = sut.LastPosition; sut.LastPosition = outerPosition; // Assert sut.LastPosition.Should().Be(start); sut.LastPosition.Should().NotBe(outerPosition); }
public void _SetLastPosition_IfLost_DoesNotChangeLastPosition() { // Arrange SimpleRobot sut = CreateSut(); // Act Orientation start = sut.Orientation; sut.LastPosition = outerPosition; sut.Orientation = Orientation.E; // Assert sut.Orientation.Should().Be(start); sut.Orientation.Should().NotBe(Orientation.E); }
public void TestRock() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); //put a rock at 0,2, try to move forward 3, make sure we stay at 0,1 _holder.SetObstacle(0, 2, _rock); robot.Move('F'); robot.Move('F'); robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(0, newPoint.XPoint); Assert.AreEqual(1, newPoint.YPoint); }
public void TestYBoundryMax() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); //move F 5 times, make sure we stay at 0,4 robot.Move('F'); robot.Move('F'); robot.Move('F'); robot.Move('F'); robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(0, newPoint.XPoint); Assert.AreEqual(4, newPoint.YPoint); }
public void TestXBountryMax() { var point = new Point(0, 0); var robot = new SimpleRobot(point, 0, _holder, 5, 5); //try to move right from 0,0 5 times: make sure we stay at 4,0 robot.Move('R'); robot.Move('F'); robot.Move('F'); robot.Move('F'); robot.Move('F'); var newPoint = robot.GetLocation(); Assert.AreEqual(4, newPoint.XPoint); Assert.AreEqual(0, newPoint.YPoint); }
public void RobotMoveTo_Hole() { //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); //hole at (9,9) connected to (7,7) grid.Topography[9, 9] = new Hole() { ObsPosition = new int[] { 9, 9 }, endPosition = new int[] { 7, 7 } }; rob.Move('F'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 7); Assert.AreEqual(newPoint[1], 7); Assert.AreEqual(rob.GetDirection(), 'N'); }
public void RobotMoveTo_Path() { //Test Path in Front //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); //Path at (9,9) , Move Front to (9,9) grid.Topography[9, 9] = new Path() { ObsPosition = new int[] { 9, 9 } }; rob.Move('F'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 9); Assert.AreEqual(rob.GetDirection(), 'N'); }
static void Main(string[] args) { string filepath = ""; //get the file to parse if (args.Length == 0) { //if there's no argument, assume that it's in the same directory as the EXE filepath = "RobotSetup.json"; } else { filepath = args[0]; } //parse the file and store the values FileParser parser = new FileParser(); var setValues = parser.ParseFile(filepath); _obstacleHolder = setValues.ObstacleHolder; _steps = setValues.Steps; _maxX = setValues.MaxX; _maxY = setValues.MaxY; //make a bot Point startingPoint = new Point(0, 0); IRobot robot = new SimpleRobot(startingPoint, 0, _obstacleHolder, _maxX, _maxY); //start running the bot foreach (var step in _steps) { robot.Move(step); } //print the path int counter = 0; foreach (var step in robot.GetPath()) { Console.WriteLine(String.Format("{0}: ({1},{2})", counter, step.XPoint, step.YPoint)); counter++; } Console.WriteLine("\n\nEnter to exit..."); Console.ReadLine(); }
public void RobotDoNotMove_AnotherRobotPosition() { //robot1 at (9,8) 'N' //Robot1 can not move Right since Robot2 is present there rob1 = new SimpleRobot(1, 9, 8, 'N', grid); rob2 = new SimpleRobot(2, 9, 9, 'N', grid); grid.RobotsInGrid = new List <SimpleRobot> { rob1, rob2 }; rob1.Move('F'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'N'); }
public void SetLastPosition_IfMovesToScentPosition_IgnoresMove() { // Arrange SimpleRobot robot = CreateSut(); robot.LastPosition = outerPosition; SimpleRobot sut = CreateSut(); // Act Position start = sut.LastPosition; sut.LastPosition = outerPosition; sut.LastPosition = innerPosition; // Assert sut.LastPosition.Should().Be(innerPosition); sut.LastPosition.Should().NotBe(start); }
private void Run() { var area = new RectangularAreaParser().Parse(Console.ReadLine()); var parser = new SimpleStateParser(); foreach (var item in GetInputs().ToArray()) { var state = parser.Parse(item.State); var robot = new SimpleRobot { Area = area, LastPosition = state.Position, Orientation = state.Orientation }; var commands = new SimpleCommandParser(robot).Parse(item.Commands); foreach (var command in commands) { command.Execute(); } Console.WriteLine($"{robot.LastPosition.X} {robot.LastPosition.Y} {robot.Orientation}" + $"{(robot.Status == Status.Lost ? ' ' + robot.Status.ToString() : string.Empty)}"); } }
public void RobotMoveTo_Spinner() { //robot at (9,8) 'N' rob = new SimpleRobot(1, 9, 8, 'N', grid); //move to spinner at (9,9) with spinAngle 90 , changes Direction to 'E' grid.Topography[9, 9] = new Spinner() { ObsPosition = new int[] { 9, 9 }, spinAngle = 90 }; rob.Move('F'); var newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 9); Assert.AreEqual(rob.GetDirection(), 'E'); //move Right to spinner at (9,8) with spinAngle 90 , changes Direction From 'E' to 'S' grid.Topography[9, 8] = new Spinner() { ObsPosition = new int[] { 9, 8 }, spinAngle = 90 }; rob.Move('R'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 9); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'S'); //move Right to spinner at (8,8) with spinAngle 90 , changes Direction From 'S' to 'W' grid.Topography[8, 8] = new Spinner() { ObsPosition = new int[] { 8, 8 }, spinAngle = 90 }; rob.Move('R'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 8); Assert.AreEqual(newPoint[1], 8); Assert.AreEqual(rob.GetDirection(), 'W'); //move Right to spinner at (8,9) with spinAngle 90 , changes Direction From 'W' to 'N' grid.Topography[8, 9] = new Spinner() { ObsPosition = new int[] { 8, 9 }, spinAngle = 90 }; rob.Move('R'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 8); Assert.AreEqual(newPoint[1], 9); Assert.AreEqual(rob.GetDirection(), 'N'); //move Left to spinner at (7,9) with spinAngle 270 , changes Direction From 'N' to 'W' grid.Topography[7, 9] = new Spinner() { ObsPosition = new int[] { 7, 9 }, spinAngle = 270 }; rob.Move('L'); newPoint = rob.GetLocation(); Assert.AreEqual(newPoint[0], 7); Assert.AreEqual(newPoint[1], 9); Assert.AreEqual(rob.GetDirection(), 'W'); }