예제 #1
0
        /// <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());
        }
예제 #2
0
 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);
 }