コード例 #1
0
        public static bool LoadTheGame()
        {
            ///Shrnutí
            ///Tato metoda dá hráči na výběr z uložených souborů ve složce AppData/Roaming/Minesweeper/SavedGames/ a načte vybraný soubor
            ///Vrací bool, podle toho zda byla hra úspěšně načtena nebo ne
            if (((Console.LargestWindowWidth - 5) > Console.WindowWidth) || ((Console.LargestWindowHeight - 3) > Console.WindowHeight)) //Nejprve se zkontroluje velikost okna a případně se počká na opravu od uživatele
            {
                Program.WaitForFix();
                Reprint();
            }
            string Path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Minesweeper");

            Path = System.IO.Path.Combine(Path, "SavedGames");                                                                                              //Dáme dohromady celou cestu ke složce
            if (!Directory.Exists(Path))                                                                                                                    //Zkontrolujeme jestli složka existuje
            {
                (new PositionedText("There are no saved games to be loaded.", ConsoleColor.Black, Console.WindowWidth / 2 - 19, 15)).Print(false, Reprint); //Pokud ne informujeme uživatele
                Console.ReadKey(true);
                return(false);                                                                                                                              //A vrátí se false, protože hra nebyla načtena
            }
            FilesAsText = new List <PositionedText>();                                                                                                      //Pokud složka existuje vytvoří se seznam, do kterého se vloží grafické interpretace souborů
            string[] saveGameFiles = Directory.GetFiles(Path);                                                                                              //Nejprve získáme názvy souborů ze složky jako array stringů
            for (int x = 0; x < saveGameFiles.Length; x++)
            {
                FilesAsText.Add(new PositionedText(System.IO.Path.GetFileNameWithoutExtension(saveGameFiles[x]), ConsoleColor.Black, Console.WindowWidth / 2 - 10, 29 + x)); //Poté z každho stringu vytvoříme PositionedText, pozice textu záleží na jeho pořadí ve složce a délce názvu
            }
            if (saveGameFiles.Length == 0)                                                                                                                                   //Pokud nezískáme žádné soubory, opět informujeme uživatele, že neexistují žádné hry k načtení
            {
                (new PositionedText("There are no saved games to be loaded.", ConsoleColor.Black, Console.WindowWidth / 2 - 19, 15)).Print(false, Reprint);
                Console.ReadKey(true);
                return(false);                     //A vrátí se false, protože hra nebyla načtena
            }
            ConsoleKey keypressed = 0;             //Nyní už uživatel může vybírat soubor. Budeme tedy číst klávesu

            ChosenFile = 0;                        //A přednastaví se vybraný soubor na nulu (tedy ten úplně horní)
            while (keypressed != ConsoleKey.Enter) //While cyklus výběru souborů probíhá až dokud není potvrzen Enterem
            {
                for (int x = 0; x < FilesAsText.Count; x++)
                {
                    FilesAsText[x].Print(x == ChosenFile, LoadFilesReprint); //Nejprve se všechny soubory vytisknou, aktuálně zvolený soubor se vytiskne zvýrazněně (bílou barvou). Pokud při tištění není hra nastavena na celou obrazovku, počká se na opravu od uživatele, vymaže se Console a toto menu a soubory se vytisknou znovu
                }
                keypressed = Console.ReadKey(true).Key;                      //Přečte klávesu od uživatele
                switch (keypressed)
                {
                case ConsoleKey.UpArrow:     //Pokud je zmáčnuté tlačítko šipka nahoru
                    if (ChosenFile != 0)     //A zároveň nejsme na souboru na pozici nula (úplně nahoře), posuneme se o jedna nahoru
                    {
                        ChosenFile--;
                    }
                    break;

                case ConsoleKey.DownArrow:                   //Pokud je zmáčknuté tlačítko šipka dolů
                    if (ChosenFile != FilesAsText.Count - 1) //A nejsme na pozici počtu souborů mínus jedna (tedy úplně dole), posuneme se o jedna dolů
                    {
                        ChosenFile++;
                    }
                    break;

                case ConsoleKey.Escape: //Pokud hráč zmáčkne Escape vrátí se zpátky do PauseMenu
                    return(false);      //Nebyla načtena žádná hra, tedy se vrátí false

                case ConsoleKey.R:      //Pokud uživatel zmáčkne R zavolá se metoda LoadFilesReprint
                    try
                    {
                        LoadFilesReprint();             //Tato metoda smaže a znovu vypíše menu i se soubory
                    }
                    catch (ArgumentOutOfRangeException) //Pokud nastane situace, že něco by se mělo tisknout mimo obrazovku
                    {
                        Program.WaitForFix();           //Program počká na opravu
                        LoadFilesReprint();             //A znovu zavolá metodu LoadFilesReprint()
                    }
                    break;
                }
            }
            GameControls.PlayedGame = new Game(File.ReadAllLines(saveGameFiles[ChosenFile])); //Nyní se z vybraného souboru vytvoří hra pomocí konstruktoru
            GameControls.SetLoaded(File.ReadAllLines(saveGameFiles[ChosenFile]));             //Zároveň se nastavení nahrají i do GameControls (jako Počet otočených políček nebo nové barvy)
            int[] Parameters = GameControls.PlayedGame.GetParameters();                       //Získají se parametry nové hry a pošlou se do Diffswitcheru
            if (Parameters[0] == 10 && Parameters[1] == 10 && Parameters[2] == 10)            //Pokud se shodují s nastavením pro obtížnost Easy (Lehkou) tak se DiffSwitcher přepne na Easy
            {
                DiffSwitcher.SwitchTo(0, false, false);
            }
            else if (Parameters[0] == 20 && Parameters[1] == 20 && Parameters[2] == 60) //Pokud se shodují s nastavením pro Medium (Střední) tak se DiffSwitcher přepne na Medium
            {
                DiffSwitcher.SwitchTo(1, false, false);
            }
            else if (Parameters[0] == 30 && Parameters[1] == 30 && Parameters[2] == 180) //Pokud se shodují s nastavením pro Hard (Těžkou) tak se DiffSwitcher přepne na Hard
            {
                DiffSwitcher.SwitchTo(2, false, false);
            }
            else //Pokud se neshodují s žádnou výchozí obtížností
            {
                DiffSwitcher.GameMenus[3] = new CustomGameMenu(Parameters); //Vytvoří se nové CustomGameMenu podle těchto parametrů, zabere třetí pozici v Arrayi obtížností
                DiffSwitcher.SwitchTo(3, false, false);              //A DiffSwitcher se na něj přepne
            }
            GameControls.PlayedGame.TilesAndMinesAroundCalculator(); //Proběhne přepočítání políček a min okolo
            return(true);                                            //Vrátí se true, protože hra byla úspěšně načtena
        }