/// <summary>Главное меню</summary>
        /// <param name="menu">Массив содержащий пункты меню</param>
        private static void MainMenu(string[] menu)
        {
            string menuMessage = MenuMessage(menu);

            bool isExit = false;

            while (!isExit)
            {
                Print();
                int input = NumberInput(menuMessage, 0, menu.Length - 1);
                switch (input)
                {
                case 1:    //search ways
                    waySearcher.SearchWays();
                    break;

                case 2:    //search ways
                    waySearcher.SearchWaysRecurrent();
                    break;

                case 3:    //create new field
                    Print();
                    int width  = NumberInput(messages[Messages.EnterWidth], WaySearcher.MIN_WIDTH, WaySearcher.MAX_WIDTH, false);
                    int height = NumberInput(messages[Messages.EnterHeight], WaySearcher.MIN_HEIGHT, WaySearcher.MAX_HEIGHT, false);
                    waySearcher = new WaySearcher(width, height);
                    break;

                case 4:    //add obstacle
                    Print();
                    int column = NumberInput(messages[Messages.EnterColumn], 0, waySearcher.Width - 1, false);
                    int row    = NumberInput(messages[Messages.EnterRow], 0, waySearcher.Height - 1, false);
                    waySearcher.AddObstacle(column, row);
                    break;

                case 5:    //add random obstacle
                    bool isAdded = false;
                    while (!isAdded)
                    {
                        column  = rnd.Next(waySearcher.Width);
                        row     = rnd.Next(waySearcher.Height);
                        isAdded = waySearcher.AddObstacle(column, row);
                    }
                    break;

                case 6:    //delete calculations
                    waySearcher.ClearField(false);
                    break;

                case 7:    //delete obstacles
                    waySearcher.ClearField(true);
                    break;

                case 0:    //exit
                    isExit = true;
                    break;
                }
            }
        }
        static int Main(string[] args)
        {
            #region ---- INIT ----

            //Изменяем размер окна консоли, чтобы влезали все художества с графом
            Console.SetWindowSize(CONSOLE_WINDOW_W, CONSOLE_WINDOW_H);

            //Обработка аругментов командной строки
            if (args.Length != 0)
            {
                if (args[0] == arguments[Arguments.Help])//Вывод справки по аргументам
                {
                    Console.WriteLine(arguments[Arguments.HelpText]);
                    return(0);
                }
                else
                {
                    for (int i = 0; i < args.Length; i++)
                    {
                        if (args[i] == arguments[Arguments.Seed])//Изменение seed'a
                        {
                            try
                            {
                                int.TryParse(args[i + 1], out seed);
                            }
                            catch
                            {
                            }
                        }
                        else if (args[i] == arguments[Arguments.Delay])//Изменение задержки визуализации
                        {
                            try
                            {
                                int.TryParse(args[i + 1], out delay);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
            }

            if (seed != 0)
            {
                rnd = new Random(seed);
            }
            else
            {
                rnd = new Random();//2
            }
            //Формируем сообщение главного меню
            string mainMenuMessage = MenuMessage(mainMenu);

            #endregion

            #region ---- SEARCHER MAKING ----

            waySearcher       = new WaySearcher(WaySearcher.MAX_WIDTH, WaySearcher.MAX_HEIGHT);
            waySearcher.Delay = delay;

            #endregion

            #region ---- MAIN WORK CYCLE ----

            MainMenu(mainMenu);

            #endregion

            return(0);
        }