Пример #1
0
        private static (Logic Logic, ITurtle Turtle) Init()
        {
            //     |    |
            //     |  M | 2,2
            // ___ | ___| ___
            //     |    |
            //     |  S |  E
            // ___ | ___| ___
            //     |    |
            // 0,0 |    | 2,0
            //     |    |

            string json = @"{
                              'board': {
                                'width': 3,
                                'height': 3,
                                'mines':[
                                    { 'x':1, 'y':2}
                                    ]
                              },
                                'startTile':{'x':1,'y':1},
                                'exitTile':{'x':2, 'y':1},
                                'direction':'North'
                            }";

            var settings      = JsonConvert.DeserializeObject <Settings>(json);
            var turtleFactory = new TurtleFactory(settings);
            var turtle        = turtleFactory.CreateTurtle();
            var logic         = new Logic(settings, turtle);

            return(logic, turtle);
        }
Пример #2
0
        private void ProcessMoves(TurtleFactory turtleFactory, Settings settings, string[] movesText)
        {
            var sequenceCounter = 1;

            foreach (var line in movesText)
            {
                var turtle = turtleFactory.CreateTurtle();
                var logic  = new Logic(settings, turtle);
                var moves  = line.Split(',');

                foreach (var move in moves.Select(m => m.Trim().ToLowerInvariant()))
                {
                    switch (move)
                    {
                    case "m":
                        turtle.MoveForward();
                        break;

                    case "r":
                        turtle.RotateRight();
                        break;

                    default:
                        Debug.WriteLine("Turtle movement command not recognized");
                        break;
                    }

                    if (logic.Status < 0)
                    {
                        break;
                    }
                }

                switch (logic.Status)
                {
                case Status.StillInDanger:
                    Console.WriteLine($"Sequence {sequenceCounter}: Still in danger!");
                    break;

                case Status.OnAMine:
                    Console.WriteLine($"Sequence {sequenceCounter}: BOOM! The turtle exploded.");
                    break;

                case Status.Exit:
                    Console.WriteLine($"Sequence {sequenceCounter}: The turtle found the exit and is safe!");
                    break;

                case Status.OutOfBounds:
                    Console.WriteLine($"Sequence {sequenceCounter}: Uh oh, you took a wrong turn.");
                    break;
                }

                sequenceCounter++;
            }

            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
Пример #3
0
        private void OnExecute()
        {
            if (!File.Exists(SettingsFile))
            {
                Console.WriteLine($"Can't find file {SettingsFile}");
                return;
            }

            if (!File.Exists(MovesFile))
            {
                Console.WriteLine($"Can't find file {MovesFile}");
                return;
            }

            var settingsText = File.ReadAllText(SettingsFile);
            var movesText    = File.ReadAllLines(MovesFile);

            Settings settings = null;

            FluentValidation.Results.ValidationResult settingsValidationResult = null;

            try
            {
                var settingsValidator = new SettingsValidator();

                settings = JsonConvert.DeserializeObject <Settings>(settingsText);
                settingsValidationResult = settingsValidator.Validate(settings);

                if (!settingsValidationResult.IsValid)
                {
                    foreach (var error in settingsValidationResult.Errors)
                    {
                        Console.WriteLine(error.ErrorMessage);
                    }
                }
            }
            catch (JsonException ex)
            {
                Console.WriteLine("The settings file contains an invalid configuration.");
                Console.WriteLine(ex.Message);
            }

            if (settingsValidationResult?.IsValid != true)
            {
                return;
            }

            var turtleFactory = new TurtleFactory(settings);

            ProcessMoves(turtleFactory, settings, movesText);
        }
Пример #4
0
        static int Main(string[] args)
        {
            if (args.Length != 2 || args.Contains("?"))
            {
                Console.WriteLine("Wrong Number of arguments. Usage: TurtleChallenge <game-settings> <moves>");
                return(1);
            }

            string settingsFileName = args[0]; //"game-settings.txt"
            string movesFileName    = args[1]; //"moves.txt"

            var settings  = SettingsReader.ReadSettingsFromFile(settingsFileName);
            var movements = MovementReader.ReadMovementsFromFile(movesFileName);

            var turtle = TurtleFactory.InitiateTurtleOnBoard(boardSize: settings.BoardSize,
                                                             startingPoint: settings.StartingPoint,
                                                             exit: settings.ExitPoint,
                                                             mines: settings.Mines,
                                                             boardMode: TurtleWorld.BusinesLogic.Enums.BoardModes.BouncingWalls,
                                                             direction: settings.InitialOrientation);
            int sequence = 1;

            //turtle.TurtleStateChanged += (obj, events) =>
            //{

            //    Console.WriteLine($"Sequence {sequence++} : {obj}");
            //};

            if (null != movements)
            {
                foreach (var m in movements)
                {
                    DoAction(turtle, m);
                    Console.WriteLine($"Sequence {sequence++}: {m} : {turtle}");
                }
            }

            // TODO : Should we check if turtle is still on the board after all movements are done? Should we break the loop above if the creature is dead already?

            return(0);
        }