public void Run(MapCoordinates mapCoordinate) { if (mapCoordinate == null) { throw new ArgumentNullException(); } foreach (var move in this.Movement) { if ((roverCoordinate.XPoint < mapCoordinate.X || roverCoordinate.YPoint < mapCoordinate.Y) && roverCoordinate.XPoint >= 0 || roverCoordinate.YPoint >= 0) { if (move == 'M') { if (roverCoordinate.Heading == 'N' || roverCoordinate.Heading == 'E' || roverCoordinate.Heading == 'W' || roverCoordinate.Heading == 'S') { var stepcount = direction.GetStepCount(roverCoordinate.Heading); if (direction.GetAxis(roverCoordinate.Heading) == 'Y') { roverCoordinate.YPoint = roverCoordinate.YPoint + stepcount; } else if (direction.GetAxis(roverCoordinate.Heading) == 'X') { roverCoordinate.XPoint = roverCoordinate.XPoint + stepcount; } } } } roverCoordinate.Heading = direction.GetDirection(roverCoordinate.Heading.ToString() + move.ToString()); } }