예제 #1
0
        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);
        }
예제 #2
0
 /// <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);
     }
 }
예제 #3
0
        /// <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;
            }
        }
예제 #4
0
        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());
        }