private Position DoMove(TurtleAction action) { if (action != TurtleAction.M) { return(Turtle.CurrentPosition); } var position = Turtle.CurrentPosition; var x = 0; var y = 0; switch (position.Direction) { case Direction.E: y += 1; break; case Direction.W: y -= 1; break; case Direction.N: x -= 1; break; case Direction.S: x += 1; break; } var p = new Point(position.Position.X + x, position.Position.Y + y); position.Position = p; return(position); }
/// <summary> /// Loads the actions from a dynamic seq and a list of TurtleActions /// </summary> /// <param name="seq">dynamic Sequence node from the json</param> /// <returns>Enumerable of TurtleAction</returns> private IEnumerable <TurtleAction> GetActions(dynamic seq) { foreach (var step in seq.Steps) { TurtleAction act = step.Action == "M" ? TurtleAction.Move : TurtleAction.Rotate; yield return(act); } }
/// <summary> /// Executes an action (Move/Rotate) based on a TurtleAction enum /// </summary> /// <param name="action">TurtleAction enum</param> internal void ExecuteAction(TurtleAction action) { switch (action) { case TurtleAction.Move: this.Move(); break; case TurtleAction.Rotate: this.Rotate(); break; } }
public Result MoveTurtle(TurtleAction action) { Turtle.DoRotate(action); var position = this.DoMove(action); if (IsHitByAMine(position)) { return(Result.MineHit()); } return(ExitHasBeenFind(position) ? Result.Success() : Result.StillInDanger()); }