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); }
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); }
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); }
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."); } }
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); }