예제 #1
0
        private void ProcessRobotInstructions(string line)
        {
            var robot = _robots.Last();

            var commands = _parser.Parse(line, false);


            foreach (var command in commands)
            {
                if (!robot.Lost && !_grid.HasScent(robot, command))
                {
                    var newRobot = _dispatcher[command.Key].Execute(robot);

                    if (_grid.IsValidPosition(newRobot.Position))
                    {
                        robot.Apply(newRobot);
                    }
                    else
                    {
                        robot.Lost = true;
                        _grid.AddScent(robot, command);
                        break;
                    }
                }
            }
            _brain.SetState(CreateAndPlaceRobot);
        }
예제 #2
0
        private void Forward(IRobot robot, IGrid grid, Point initialPosition)
        {
            robot.MoveForward();
            var position = robot.GetPosition();

            if (grid.IsOutside(position))
            {
                robot.Status = RobotStatus.LOST;
                grid.AddScent(initialPosition);
            }
        }