private bool ImportSettingJson(string fileText, out Tableboard tableboard)
        {
            tableboard = null;
            TurtleDirectionType  turtleDirection;
            TurtleTableboardFile fileBoard;

            try
            {
                fileBoard       = JsonConvert.DeserializeObject <TurtleTableboardFile>(fileText);
                turtleDirection = MapTurtleDirectionType(fileBoard.TurtleDirection);
            }
            catch
            {
                return(false);
            }
            tableboard = new Tableboard
            {
                Size  = fileBoard.Size,
                Exit  = fileBoard.Exit,
                Mines = fileBoard.Mines?
                        .Where(m => m.X >= 0 &&
                               m.Y >= 0 &&
                               m.X < fileBoard.Size.Width &&
                               m.Y < fileBoard.Size.Height &&
                               m != fileBoard.Exit &&
                               m != fileBoard.TurtlePosition)
                        .ToHashSet(),
                Turtle = new Turtle
                {
                    Position  = fileBoard.TurtlePosition,
                    Direction = turtleDirection
                }
            };
            return(true);
        }
Example #2
0
        public BoardValidationResult ValidateBoard(Tableboard board)
        {
            var maxX = Math.Min(MAX_CELL, Math.Max(0, board.Size.Width - 1));
            var maxY = Math.Min(MAX_CELL, Math.Max(0, board.Size.Height - 1));
            Func <Point, bool> isOutsideBoard = point =>
                                                point.X <0 ||
                                                         point.X> maxX ||
                                                point.Y <0 ||
                                                         point.Y> maxY;
            var result = new BoardValidationResult {
                Result = new List <BoardValidationErrorType>()
            };

            if (board.Size.Width < MIN_CELL || board.Size.Width > MAX_CELL)
            {
                result.Result.Add(BoardValidationErrorType.WrongWidth);
            }
            if (board.Size.Height < MIN_CELL || board.Size.Height > MAX_CELL)
            {
                result.Result.Add(BoardValidationErrorType.WrongHeight);
            }
            if (isOutsideBoard(board.Exit))
            {
                result.Result.Add(BoardValidationErrorType.WrongExit);
            }
            if (isOutsideBoard(board.Turtle.Position))
            {
                result.Result.Add(BoardValidationErrorType.WrongTurtlePosition);
            }

            return(result);
        }
Example #3
0
        public NextActionResult NextActionResult(TurtleActionType action, Tableboard tableboard)
        {
            var result = new NextActionResult {
                Board = tableboard
            };

            if (tableboard.Won || tableboard.Lose)
            {
                result.Type = NextActionResultType.Finished;
            }
            else
            {
                try
                {
                    switch (action)
                    {
                    case TurtleActionType.Rotate:
                        tableboard.RotateTurtle();
                        result.Type = NextActionResultType.SuccessRotate;
                        break;

                    case TurtleActionType.Move:
                        if (tableboard.CanTurtleMove())
                        {
                            tableboard.MoveTurtle();
                            result.Type = tableboard.Won ?
                                          NextActionResultType.Win :
                                          tableboard.Lose ?
                                          NextActionResultType.Lost :
                                          NextActionResultType.SuccessMove;
                        }
                        else
                        {
                            result.Type = NextActionResultType.Invalid;
                        }
                        break;

                    default:
                        result.Type = NextActionResultType.UnknownAction;
                        break;
                    }
                }
                catch
                {
                    result.Type = NextActionResultType.Error;
                }
            }
            return(result);
        }
Example #4
0
        public static List <string> NextListActionResult(List <TurtleActionType> actions, Tableboard tableboard)
        {
            var serviceBoard  = new BoardController();
            var actionsResult = serviceBoard.NextListActionResult(actions, tableboard);

            if (actionsResult.Success)
            {
                int sequential = 1;
                var result     = actionsResult.Result.Select(r => $"Sequence {sequential++}: {GetActionResultText(r)}").ToList();
                if (actions.Count > sequential)
                {
                    result.Add($"Sequence from {sequential} to {actions.Count}: {GetActionResultText(NextActionResultType.Finished)}");
                }
                return(result);
            }
            else
            {
                throw new MessageException("Something strange happen. Try again later please.");
            }
        }
Example #5
0
        public NextListActionResult NextListActionResult(List <TurtleActionType> actions, Tableboard tableboard)
        {
            var result = new NextListActionResult {
                Result = new List <NextActionResultType>(), Board = tableboard
            };
            var actionsQueue = new Queue <TurtleActionType>(actions);

            while (!tableboard.Finished && actionsQueue.TryDequeue(out TurtleActionType action))
            {
                result.Result.Add(NextActionResult(action, tableboard).Type);
            }
            return(result);
        }