예제 #1
0
        private static void Main(string[] args)
        {
            try
            {
                IPlateau?plateau;
                var      rovers = new List <IRover>();
                Console.WriteLine(args[0]);
                using (var tr = args.Length <= 0 ? Console.In : new StreamReader(args[0]))
                {
                    var parser = new Parser(tr);
                    plateau = parser.ParsePlateau();
                    if (plateau == null)
                    {
                        throw new ArgumentException("Missing information about Mars plateau");
                    }

                    IRover?rover;
                    for (uint i = 0; (rover = parser.ParseRover(i)) != null; i++)
                    {
                        rovers.Add(rover);
                    }
                }

                var h = new Houston(plateau, rovers);
                h.Control(new PrintReporter(Console.Out, Console.Error));
            }
            catch (Exception e)
            {
                Console.Error.WriteLine($"Error: {e.Message}\n{e.StackTrace}");
                Environment.Exit(1);
            }
        }
        public void ProcessCommands(string commandString)
        {
            var commands = commandString.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            RobotAdmin robotAdmin = new RobotAdmin(plateau);

            foreach (var command in commands)
            {
                if (!string.IsNullOrEmpty(command.Trim()))
                {
                    var commandtype = CommandMatcher.GetCommandType(command);
                    if (commandtype == CommandType.PlateauCoordinates)
                    {
                        var upperBounds = Parser.ParsePlateau(command);
                        plateau.SetUpperCoordinates(upperBounds);
                    }
                    if (commandtype == CommandType.RoverInitialCoordinates)
                    {
                        string directionName = "";
                        var    coordinates   = Parser.ParsePosition(command, out directionName);

                        robotAdmin.AddRover(coordinates, directionName);
                    }
                    if (commandtype == CommandType.RoverMovement)
                    {
                        if (robotAdmin.CurrentRover != null)
                        {
                            List <ICommand> movementCommands = Parser.MaptoCommands(command);
                            foreach (var movementCommand in movementCommands)
                            {
                                movementCommand.Invoke(robotAdmin.CurrentRover);
                            }
                        }
                        else
                        {
                            throw new ArgumentException("Please provide the rover coordinates to deploy the rover");
                        }

                        Console.WriteLine($"{robotAdmin.CurrentRover.ToString()}");
                    }
                }
            }
        }