static void Main(string[] args) { try { var limitX = InputParams.Position("Set limit to cartesian point from X axis: "); var limitY = InputParams.Position("Set limit to cartesian point from Y axis: "); var spaceProbePositioner = new SpaceProbePositioner(limitX, limitY); while (true) { var positionX = InputParams.Position("Set cartesian point from X axis: "); var positionY = InputParams.Position("Set cartesian point from Y axis: "); var direction = InputParams.Direction("Set direction in plateau (N S E W): "); var moviments = InputParams.Moviments("Set sequence of moviments. Ex: L M L M L M L M M: "); var spaceProbe = new SpaceProbe() { Direction = direction, PositionX = positionX, PositionY = positionY }; spaceProbePositioner.MoveSpaceProbe(spaceProbe, MovimentsFactory.SetMoviments(moviments, spaceProbePositioner)); Console.WriteLine(spaceProbe.ToString()); Console.WriteLine(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }
public static IMovimentAgent SetMoviments(string moviments, SpaceProbePositioner spaceProbePositioner) { var _moviments = moviments.ToCharArray(); var movimentsList = new List <IMovimentAgent>(); foreach (var moviment in _moviments) { switch (moviment) { case 'L': movimentsList.Add(new LeftRedirectorAgent()); break; case 'R': movimentsList.Add(new RigthRedirectorAgent()); break; case 'M': movimentsList.Add(new MovimentAgent(spaceProbePositioner)); break; default: throw new InvalidMovimentException(moviment); } } return(new Moviments(movimentsList)); }
public void TestCreateMoviments(string moviments, SpaceProbe spaceProbe, SpaceProbe expected) { var limitX = 5; var limitY = 5; var spaceProbePositioner = new SpaceProbePositioner(limitX, limitY); spaceProbePositioner.MoveSpaceProbe(spaceProbe, MovimentsFactory.SetMoviments(moviments, spaceProbePositioner)); Assert.Equal(expected.PositionX, spaceProbe.PositionX); Assert.Equal(expected.PositionY, spaceProbe.PositionY); Assert.Equal(expected.Direction.Current, spaceProbe.Direction.Current); }
public void PrepareTest(int limitX, int limitY, Direction direction) { var spaceProbePositioner = new SpaceProbePositioner(limitX, limitY); var spaceProbe = new SpaceProbe() { Direction = direction, PositionX = limitX, PositionY = limitY }; var motionAgent = new MovimentAgent(spaceProbePositioner); spaceProbePositioner.MoveSpaceProbe(spaceProbe, motionAgent); }
public override bool IsPossibleMove(SpaceProbe spaceProbe, SpaceProbePositioner spaceProbePositioner) => spaceProbe.PositionX > 0;
public abstract bool IsPossibleMove(SpaceProbe spaceProbe, SpaceProbePositioner spaceProbePositioner);