예제 #1
0
        public void GetNextPositionLeftTest()
        {
            var nextposition = new Position()
            {
                X = 1, Y = 1, Direction = new Direction()
                {
                    CardinalCompassPoint = 'N', Left = 'W', Right = 'E'
                }
            };
            var currentposition = new Position()
            {
                X = 1, Y = 1, Direction = new Direction()
                {
                    CardinalCompassPoint = 'E', Left = 'N', Right = 'S'
                }
            };
            var testPosition = _roverMotion.GetNextPosition(currentposition, 'L');

            Assert.AreEqual(testPosition, nextposition);
        }
예제 #2
0
        static void Main(string[] args)
        {
            try
            {
                List <Rover> rovers = new List <Rover>();

                Console.WriteLine("Mars platosunun sınır değerlerini giriniz:");

                var plateauInput      = Console.ReadLine();
                var plateauInputArray = plateauInput?.Split(' ');

                if (plateauInputArray == null && plateauInputArray.Length < 2)
                {
                    throw new Exception("Sınır değerleri uygun değil");
                }

                Console.WriteLine("Mars platosunun sınır değerlerini giriniz:");

                var plateau = new Plateau();

                if (Int32.TryParse(plateauInputArray[0], out int xLenght))
                {
                    plateau.xLenght = xLenght;
                }
                else
                {
                    throw new Exception("Sınır X değeri uygun değil");
                }

                if (Int32.TryParse(plateauInputArray[1], out int yLenght))
                {
                    plateau.yLenght = yLenght;
                }
                else
                {
                    throw new Exception("Sınır Y değeri uygun değil");
                }

                var roverOk = "e";
                while (roverOk.ToLower() == "e")
                {
                    Console.WriteLine("Mars aracı için konum giriniz:");

                    var roverPositionInput = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(roverPositionInput))
                    {
                        throw new Exception("Mars aracı için konum hatalı");
                    }

                    Console.WriteLine("Mars aracı için komutları giriniz:");

                    var roverCommands = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(roverCommands))
                    {
                        throw new Exception("Mars aracı için komut hatalı");
                    }

                    var roverPositionInputArray = roverPositionInput.Split(" ");

                    if (roverPositionInputArray == null && roverPositionInputArray.Length < 3)
                    {
                        throw new Exception("Konum değerleri uygun değil");
                    }

                    var position = new Position();

                    if (Int32.TryParse(roverPositionInputArray[0], out int x))
                    {
                        position.X = x;
                    }
                    else
                    {
                        throw new Exception("X değeri uygun değil");
                    }

                    if (Int32.TryParse(roverPositionInputArray[1], out int y))
                    {
                        position.Y = y;
                    }
                    else
                    {
                        throw new Exception("Y değeri uygun değil");
                    }

                    position.Direction = DirectionHelper.GetDirection(roverPositionInputArray[2].ToUpper().First());

                    rovers.Add(new Rover()
                    {
                        Commands = roverCommands, CurruntPosition = position
                    });

                    Console.WriteLine("Yeni Mars aracı için giriş yapacak mısınız?(e/h):");

                    roverOk = Console.ReadLine();
                }

                var roverControl = new RoverMotion(plateau);

                foreach (var rover in rovers)
                {
                    foreach (var command in rover.Commands)
                    {
                        rover.CurruntPosition = roverControl.GetNextPosition(rover.CurruntPosition, command);
                    }

                    Console.WriteLine(rover.CurruntPosition.ToString());
                }


                Console.WriteLine("Çıkış için bir tuşa basınız");
                Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }