Example #1
0
        private static CurrentlyPositionAndStatus RunCommand(CurrentlyPositionAndStatus currentlyPosition, IEnumerable <GameCoordinate> mineCoordinate, string command)
        {
            var movement = Movements.UnknownMovement;

            movement = (Movements)Enum.Parse(typeof(Movements), command);
            if (movement.Equals(Movements.UnknownMovement))
            {
                throw new ArgumentException();
            }

            switch (movement)
            {
            case Movements.M:
                currentlyPosition = MoveTurtle(mineCoordinate, currentlyPosition);
                break;

            case Movements.L:
                currentlyPosition = RotateLeftTurtle(currentlyPosition);
                break;

            case Movements.R:
                currentlyPosition = RotateRightTurtle(currentlyPosition);
                break;

            case Movements.UnknownMovement:
                break;

            default:
                Console.WriteLine("Unknown Movement");
                break;
            }


            return(currentlyPosition);
        }
Example #2
0
        /// <summary>
        /// Calculating game movements and write console results.
        /// </summary>
        /// <param name="gameContext">Game context, it is include mapped game settings</param>
        public bool CalculateGameResults(GameContext gameContext)
        {
            if (gameContext == null)
            {
                return(false);
            }
            foreach (var line in gameContext.CommandList)
            {
                var currentlyPosition = new CurrentlyPositionAndStatus
                {
                    CoordX    = gameContext.StartPosition.CoordX,
                    CoordY    = gameContext.StartPosition.CoordY,
                    Direction = gameContext.StartPosition.Direction,
                    Status    = (int)GameStatus.NotStarted
                };
                var i = 0;
                foreach (var command in line)
                {
                    try
                    {
                        currentlyPosition = RunCommand(currentlyPosition, gameContext.MineCoordinates, command);
                    }
                    catch (ArgumentException)
                    {
                        Console.WriteLine("Unknown Movement");
                        return(false);
                    }

                    if (currentlyPosition.Status == (int)GameStatus.MineHit)
                    {
                        Console.WriteLine("Sequence {0}: Mine hit!", gameContext.CommandList.IndexOf(line) + 1);
                        break;
                    }

                    if (i == line.Count - 1)
                    {
                        if (currentlyPosition.CoordX == gameContext.ExitPoint.CoordX &&
                            currentlyPosition.CoordY == gameContext.ExitPoint.CoordY)
                        {
                            Console.WriteLine("Sequence {0}: Success!", gameContext.CommandList.IndexOf(line) + 1);
                            currentlyPosition.Status = (int)GameStatus.Succeed;
                        }
                        else
                        {
                            Console.WriteLine("Sequence {0}: Still in danger!",
                                              gameContext.CommandList.IndexOf(line) + 1);
                            currentlyPosition.Status = (int)GameStatus.StillInDanger;
                        }
                    }

                    i++;
                }
            }

            return(true);
        }
Example #3
0
        private static CurrentlyPositionAndStatus RotateLeftTurtle(CurrentlyPositionAndStatus currentlyPosition)
        {
            switch (currentlyPosition.Direction)
            {
            case "N":
                currentlyPosition.Direction = Directions.West;
                break;

            case "S":
                currentlyPosition.Direction = Directions.East;
                break;

            case "W":
                currentlyPosition.Direction = Directions.South;
                break;

            case "E":
                currentlyPosition.Direction = Directions.North;
                break;
            }
            return(currentlyPosition);
        }
Example #4
0
        private static CurrentlyPositionAndStatus MoveTurtle(IEnumerable <GameCoordinate> mineCoordinates, CurrentlyPositionAndStatus currentlyPosition)
        {
            switch (currentlyPosition.Direction)
            {
            case "N":
                currentlyPosition.CoordY = currentlyPosition.CoordY - 1;
                break;

            case "S":
                currentlyPosition.CoordY = currentlyPosition.CoordY + 1;
                break;

            case "W":
                currentlyPosition.CoordX = currentlyPosition.CoordX - 1;
                break;

            case "E":
                currentlyPosition.CoordX = currentlyPosition.CoordX + 1;
                break;
            }
            foreach (var item in mineCoordinates)
            {
                if (item.CoordX == currentlyPosition.CoordX && item.CoordY == currentlyPosition.CoordY)
                {
                    currentlyPosition.Status = (int)GameStatus.MineHit;
                }
            }
            return(currentlyPosition);
        }