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); }
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); } }