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 }