/// <summary> /// Generates the output /// </summary> /// <param name="input"></param> /// <returns></returns> public string GenerateOutput(string input) { List <Minefield> minefields = new List <Minefield>(); Minefield minefield = null; StringBuilder output = new StringBuilder(); string[] delimiter = { Environment.NewLine }; string[] words = input.Split(delimiter, StringSplitOptions.None); foreach (string s in words) { if (MinefieldValidator.IsHeader(s)) { minefield = MinefieldFactory.Create(minefields.Count + 1, s); minefields.Add(minefield); } else if (MinefieldValidator.isFooter(s)) { break; } else { foreach (char c in s.ToCharArray()) { if (CellValidator.isMineOrSafe(c.ToString())) { minefield.Cells.Add(CellFactory.Create(c)); } else { ErroMessage = "Your input data is not valid."; return(output.ToString()); } } } } try { foreach (Minefield field in minefields) { MinesweeperConverter converter = new MinesweeperConverter(); converter.ConvertMinefield(field); //header output.Append(String.Format(MinefieldValidator.headerOutput, field.Id)); output.Append(Environment.NewLine); //result output.Append(converter.output); output.Append(Environment.NewLine); } } catch { ErroMessage = "Your input data is not valid."; return(output.ToString()); } return(output.ToString()); }
public bool ParseInput(string input) { if (MinefieldValidator.IsHeader(input)) { //Validate cells count of the current minefield if (minefield != null && !MinefieldValidator.isValidCellCount(minefield.Cells.Count, minefield.RowsCount, minefield.ColumnsCount)) { this.Renderer.ClearCurrentLine(); return(true); } //create a new minefield and add to a list of minefields minefield = MinefieldFactory.Create(minefields.Count + 1, input); minefields.Add(minefield); } //Check for end of user input else if (MinefieldValidator.isFooter(input)) { //Validate cells count of the current minefield if (minefield != null && !MinefieldValidator.isValidCellCount(minefield.Cells.Count, minefield.RowsCount, minefield.ColumnsCount)) { this.Renderer.ClearCurrentLine(); return(true); } else { //end of user's input return(false); } } else { //validate that the signs is equal to columns if (minefield != null && minefield.ColumnsCount != input.Length) { this.Renderer.ClearCurrentLine(); return(true); } CreateCells(minefield, input); } return(true); }