예제 #1
0
        public void ReturnsNullWhenIncompleteSettingsProvided()
        {
            var completeSettingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "2 4",
                "0 1 N",
                "R M L M M R M M M"
            };

            var incompleteSettingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "2 4",
                "0 1 N"
            };

            var completeSettings   = GameSettingsReader.LoadSettings(completeSettingsLines);
            var incompleteSettings = GameSettingsReader.LoadSettings(incompleteSettingsLines);

            Assert.IsNotNull(completeSettings);
            Assert.IsNull(incompleteSettings);
        }
예제 #2
0
        static void Main(string[] args)
        {
            string settingsFilePath = args.Length > 0 ? args[0] : string.Empty;

            while (string.IsNullOrEmpty(settingsFilePath))
            {
                Console.WriteLine("Provide path to game settings");
                settingsFilePath = Console.ReadLine();
            }

            var settingsTxt = File.ReadAllLines(settingsFilePath);

            var settings = GameSettingsReader.LoadSettings(settingsTxt);

            if (settings != null && settings.Valid())
            {
                foreach (var actionList in settings.ActionsLists)
                {
                    var board     = new Board(settings.BoardWidth, settings.BoardHeight, settings.Mines, settings.ExitPoint);
                    var turtle    = new Turtle(settings.StartingPoint, settings.StartingDirection);
                    var minefield = new Minefield(board, turtle);
                    Console.WriteLine($"Result: {minefield.TryEscape(actionList)}");
                }
            }
            else
            {
                Console.WriteLine("Invalid settings provided!");
            }
        }
예제 #3
0
        public void ReadsSettings()
        {
            var settingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "4 2",
                "0 1 N",
                "R M L M M R M M M"
            };

            var settings = GameSettingsReader.LoadSettings(settingsLines);

            Assert.AreEqual(5, settings.BoardWidth);
            Assert.AreEqual(4, settings.BoardHeight);

            Assert.IsTrue(settings.Mines.Contains(new Coordinate(1, 1)));
            Assert.IsTrue(settings.Mines.Contains(new Coordinate(1, 3)));
            Assert.IsTrue(settings.Mines.Contains(new Coordinate(3, 3)));

            Assert.AreEqual(new Coordinate(4, 2), settings.ExitPoint);

            Assert.AreEqual(new Coordinate(0, 1), settings.StartingPoint);
            Assert.AreEqual(Direction.N, settings.StartingDirection);
        }
예제 #4
0
        public void GeneratesMineHitStillInDangerOutcomeWhenTurtleRemainsInTheMinefield()
        {
            var settingsLines = new string[]
            {
                "5 4",
                "1,2 2,2",
                "2 4",
                "2 1 N",
                "M M"
            };

            var settings = GameSettingsReader.LoadSettings(settingsLines);
            var board    = new Board(settings.BoardWidth, settings.BoardHeight, settings.Mines, settings.ExitPoint);
            var turtle   = new Turtle(settings.StartingPoint, settings.StartingDirection);

            var minefield = new Minefield(board, turtle);

            Assert.AreEqual(GameOutcome.StillInDanger, minefield.TryEscape(settings.ActionsLists[0]));
        }
예제 #5
0
        public void ValidatesSettings()
        {
            var correctSettingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "2 4",
                "0 1 N",
                "R M L M M R M M M"
            };

            var missingMovesSettingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "4 2",
                "0 1 N",
                ""
            };

            var startingPointOutsideBoardSettingsLines = new string[]
            {
                "5 4",
                "1,1 1,3 3,3",
                "4 2",
                "0 6 N",
                ""
            };

            var correctSettings      = GameSettingsReader.LoadSettings(correctSettingsLines);
            var missingMovesSettings = GameSettingsReader.LoadSettings(missingMovesSettingsLines);
            var startingPointOutsideBoardSettings = GameSettingsReader.LoadSettings(startingPointOutsideBoardSettingsLines);

            Assert.IsTrue(correctSettings.Valid());
            Assert.IsFalse(missingMovesSettings.Valid());
            Assert.IsFalse(startingPointOutsideBoardSettings.Valid());
        }