public void Reprint()
 {
     ///Shrnutí
     ///Metoda, která smaže a znovu vytiskne menu. Používá se v případě, že uživatel zmenšil nedopatřením okno, aby se mu povedlo srovnat vytištěné objekty na svá místa.
     Console.BackgroundColor = ConsoleColor.Black;
     Console.Clear();                  //Vymaže Consoli
     DiffSwitcher.PrintGraphics(true); //Vytiskne znovu grafiky
     PrintMenu(false);                 //Víme že se nacházíme někde mezi nastaveními, proto není jméno zvýrazněno
 }
 public void PrintMenu(bool higlightName)
 {
     ///Shrnutí
     ///Vytiskne znovu menu, přijímá bool, podle kterého určuje zda má být jméno zvýrazněno
     DiffSwitcher.PrintMenuName(higlightName); //Nejprve se vytiskne jméno
     DiffSwitcher.PrintGraphics(false);        //Následně grafiky bez obdélníků (tedy hlavně druhý a třetí řádek menu)
     foreach (GameSetting setting in GameSettings)
     {
         setting.Print(false, Reprint); //Následně se vytisknou všechny GameSettingy z arraye v menu
     }
     foreach (GameSetting colourSetting in DiffSwitcher.Colours)
     {
         colourSetting.Print(false, Reprint); //A všechny barvy z arraye společného pro všechna menu
     }
 }
        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
        }
Beispiel #4
0
        public Game(string[] savedGame) //Konstruktor, který slouží k vytvoření hry z hry uložené v souboru .txt
        {
            ///První řádek: Pozice umístěných vlaječek
            ///Druhý řádek: Pozice umístěných otazníků
            ///Třetí řádek: Pozice min
            ///Čtvrtý řádek: Pozice již otočených políček
            ///Pátý řádek: Parametry hry
            ///Šestý řádek: Současný čas
            string[] parameters = savedGame[4].Split(','); //Z pátého řádku se přečtou parametry hry a zapíší se do fieldů
            HorizontalTiles           = int.Parse(parameters[0]);
            VerticalTiles             = int.Parse(parameters[1]);
            Mines                     = int.Parse(parameters[2]);
            Cover                     = (ConsoleColor)int.Parse(parameters[3]);
            CoverSecondary            = (ConsoleColor)int.Parse(parameters[4]);
            Uncover                   = (ConsoleColor)int.Parse(parameters[5]);
            UncoverSecondary          = (ConsoleColor)int.Parse(parameters[6]);
            Flag                      = (ConsoleColor)int.Parse(parameters[7]);
            Highlight                 = (ConsoleColor)int.Parse(parameters[8]);
            Text                      = (ConsoleColor)int.Parse(parameters[9]);
            Program.DefaultTextColour = Text;                                     //Barva textu v programu se také změní podle uložené hry
            Minefield                 = new Tile[HorizontalTiles, VerticalTiles]; //Vytvoří se prázdný Minefield
            ConsoleColor currentColour;

            DiffSwitcher.SetLoaded(parameters); //Parametry se odešlou také do DiffSwitcheru, aby hráč, pokud se vrátí zpátky do nastavení, zde viděl tato nastavení

            for (int x = 0; x != HorizontalTiles; x++)
            {
                if (x % 2 == 0)
                {
                    currentColour = Cover;
                }
                else
                {
                    currentColour = CoverSecondary; //Nastavení barev funguje naprosto stejně jako u prvního konstruktoru
                }
                for (int y = 0; y != VerticalTiles; y++)
                {
                    Minefield[x, y] = new CoveredTile(false, currentColour, (Console.WindowWidth / 2 - HorizontalTiles + 2 * x), y + ((Console.WindowHeight - VerticalTiles) / 2), x, y); //Nejprve se pokryje celý Minefield neotočenými políčkami
                    if (currentColour == Cover)
                    {
                        currentColour = CoverSecondary;
                    }
                    else
                    {
                        currentColour = Cover;
                    }
                }
            }
            string[] uncovered = savedGame[3].Split(';'); //Poté se podle čtvrtého řádku otočí políčka
            foreach (string coordinates in uncovered)
            {
                if (coordinates != "")
                {
                    string[] position = coordinates.Split(',');
                    Minefield[int.Parse(position[0]), int.Parse(position[1])] = new UncoveredTile(Minefield[int.Parse(position[0]), int.Parse(position[1])], false);
                }
            }
            string[] flagged = savedGame[0].Split(';'); //Podle prvního řádku se označí políčka vlaječkou
            foreach (string coordinates in flagged)
            {
                if (coordinates != "")
                {
                    string[] position = coordinates.Split(',');
                    Minefield[int.Parse(position[0]), int.Parse(position[1])].SetTileToFlag();
                }
            }
            string[] questioned = savedGame[1].Split(';');
            foreach (string coordinates in questioned) //Podle druhého řádku se umístí ozazníčky
            {
                if (coordinates != "")
                {
                    string[] position = coordinates.Split(',');
                    Minefield[int.Parse(position[0]), int.Parse(position[1])].SetTileToQuestionMark();
                }
            }
            string[] mines = savedGame[2].Split(';'); //A podle třetího řádku se umístí miny
            foreach (string coordinates in mines)
            {
                if (coordinates != "")
                {
                    string[] position = coordinates.Split(',');
                    Minefield[int.Parse(position[0]), int.Parse(position[1])].PlantMine();
                }
            }
        }
        ///Shrnutí
        ///Ve statické třídě Program jsou uloženy některé důležité globální hodnoty a metody. Například barva textu nebo metoda, která požaduje opravu velikosti okna neo metoda, která zobrazuje tabulku nejlepších výsledků.
        static void Main()
        {///Shrnutí
         ///Základní metoda Main() nejprve donutí uživatele zvětšit okno na celou obrazovku a následně zobrazí první menu, které má tři tlačítka
         ///Play Minesweeper: Otevřít menu, kterým se vytváří nastavení hry
         ///Show Highscores: Zobrazit tabulku nejlepších výsledků
         ///Quit: Ukončit program
            Console.BackgroundColor = ConsoleColor.Black;                                                       //Restartuje barvu pozadí v konzoli na černou
            Console.ForegroundColor = ConsoleColor.Yellow;                                                      //Nastaví barvu textu v konzoli na žlutou
            TakenColours            = new List <ConsoleColor>();                                                //Ve fieldu TakenColors se vytvoří nový prázdný seznam, do kterého budou později přidávány a odebírany barvy. Pokud je nějaká barva v seznamu, není možné nějaké nastavení na tuto barvu změnit, aby nemohly mít dva artikly stejnou barvu.
            Console.CursorVisible   = false;                                                                    //Skryje kurzor, neboť působí rušivě
            Console.WriteLine("Please fullscreen");                                                             //Objeví se zpráva uživateli, aby zvětšil okno na celou obrazovku
            Console.WriteLine("Alt+Enter is highly recommended");                                               //Uživateli je doporučeno, aby okno zvětšil stiskutím kláves Alt+Enter, a ne pouze maximilizováním okna.
            Console.WriteLine("It is not recommended to Alt+Tab during the game or to un-fullscreen the game"); //Na závěr je uživateli doporučeno, aby hru neschovával na lištu stisknutím kláves Alt+Tab nebo zmenšoval okno
            while (((Console.LargestWindowWidth - 5) > Console.WindowWidth) || ((Console.LargestWindowHeight - 3) > Console.WindowHeight))
            {
            }   //Prázdný while cyklus čekající na zvětšení okna donutí uživatele zvětšit hru na celou obrazovku.
            while (Console.KeyAvailable)
            {
                Console.ReadKey(true);                                                                                                                          //Tento while cyklus odstraní ze streamu kláves všechny stisknuté klávesy. Dokud není stream kláves prázdný čte klávesy a nechává je být.
            }
            Console.CursorVisible = false;                                                                                                                      //Znovu skryje kurzor, který se může při zvětšení okna znovu objevit
            DefaultTextColour     = ConsoleColor.Yellow;                                                                                                        //Výchozí barva textu se nastaví na žlutou, která je stále velmi dobře čitelná na černém podkladu. Bílá barva se bude používat na zvýrazňování vybraného tlačítka.
            FirstStart            = true;                                                                                                                       //Field FirstStart, který indikuje zda uživatel zapíná nastavení hry poprvé, se nastaví na true
            PositionedText PlayGame            = new PositionedText("Play Minesweeper", ConsoleColor.Black, Console.WindowWidth / 2 - 8, 10);                   //Vytvoří se tlačítko, kterým se zapíná hra
            PositionedText ShowHighscores      = new PositionedText("See Highscores", ConsoleColor.Black, Console.WindowWidth / 2 - 7, 12);                     //Vytvoří se tlačítko, kterým se zobrazují nejlepší výsledky
            PositionedText Quit                = new PositionedText("Quit", ConsoleColor.Black, Console.WindowWidth / 2 - 2, 14);                               //Vytvoří se tlačítko, kterým se dá hra ukončit
            Border         MainMenuSmallBorder = new Border(Console.WindowWidth / 2 - 10, 8, 10, 20, ConsoleColor.Black, ConsoleColor.White, false);            //Vytvoří se obdélník, který ohraničuje všechna tři tlačítka
            Border         MainMenuBigBorder   = new Border(0, 1, Console.WindowHeight - 1, Console.WindowWidth, ConsoleColor.Black, ConsoleColor.Gray, false); //Vytvoří se velký obdélník, který ohraničuje celou obrazovku

            ChosenLabel = 0;                                                                                                                                    //Field ChosenLabel, který označuje vybrané tlačítko se nastaví na 0
            Labels      = new List <IGraphic> {
                PlayGame, ShowHighscores, Quit, MainMenuSmallBorder, MainMenuBigBorder
            };                         //Field Labels je seznam všech grafických artiklů — tlačítek a obdélníků
            ConsoleKey keypressed = 0; //Stisknuté tlačítko je nastaveno na nulu a bude se číst od uživatele

            Console.Clear();           //Vyčistí obrazovku a připraví ji na vytisknutí prvního menu
            for (int x = 3; x < 5; x++)
            {
                Labels[x].Print(x == 4, Reprint); //Vytiskne první menu. Obdelník na pozici 4, tedy velký obdélník ohraničující celou obrazovku se vytiskne jako solid – jeho svislé čáry mají tloušťku dvou charů. 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 vytiskne se toto menu znovu od začátku
            }
            while (true)                          //Následuje nekonečný while cyklus, který se dá ukončit pouze vypnutím programu přes tlačítko Quit
            {
                for (int x = 0; x < 3; x++)
                {
                    Labels[x].Print(x == ChosenLabel, Reprint); //Nejprve se znovu vytisknou všechna tlačítka. Pokud se pozice tlačítka shoduje s intem ve fieldu ChosenLabel vytiskne se zvýrazněně, tedy 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 vytiskne se toto menu znovu od začátku
                }
                keypressed = Console.ReadKey(true).Key;         //Přečte klávesu, kterou stiskne uživatel
                switch (keypressed)
                {
                case ConsoleKey.UpArrow:   //Pokud uživatel stiskne šipku nahoru
                    if (ChosenLabel != 0)  //A ChosenLabel už není na svém minimu tedy na nule
                    {
                        ChosenLabel--;     //Sníží se ChosenLabel o jedna, tedy se zvýrazní a vybere tlačítko o jedna výše
                    }
                    break;

                case ConsoleKey.DownArrow: //Pokud uživatel stiskne šipku dolů
                    if (ChosenLabel != 2)  //A ChosenLabel už není na svém maximu tedy na dvojce
                    {
                        ChosenLabel++;     //Zvýší se ChosenLabel o jedna, tedy se zvýrazní a vybere tlačítko o jedna níže
                    }
                    break;

                case ConsoleKey.Enter:                                //Pokud uživatel zmáčkne Enter, tak se potvrdí aktuální výběr
                    switch (ChosenLabel)                              //Co se bude dít dál rozhodne to, které tlačítko je vybráno
                    {
                    case 0:                                           //Pokud je ChosenLabel 0, tedy vybraným tlačítkem je Play Minesweeper
                        DiffSwitcher.StartMenu(FirstStart);           //Přejde se do statické třídy DiffSwitcher, která vytiskne menu s nastaveními hry a umožní je měnit, pokud se jedná o první start, nastaví se výchozí hodnoty. Jinak se zůstávají předchozí hodnoty
                        FirstStart = false;                           //Když se uživatel vrátí z herního menu zpátky do prvního menu, tak se nastaví field FirstStart na false
                        Console.BackgroundColor = ConsoleColor.Black; //Následně se obrazovka vyčistí od předchozího menu
                        Console.Clear();
                        for (int x = 0; x < 5; x++)                   //A znovu se vytisknou všechny grafické artikly
                        {
                            Labels[x].Print(x == 4, Reprint);         //Artikl s pozicí 4, kterým je velký obdélník okolo celé obrazovky, se vytiskne s širokými svislými liniemi. 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 vytiskne se toto menu znovu od začátku
                        }
                        break;

                    case 1:                                   //Pokud je ChosenLabel 1, tedy vybraným tlačítkem je ShowLeaderboards
                        ShowLeaderboards();                   //Zavolá místní statickou metodu ShowLeaderboards, která zobrazuje nejlepší výsledky
                        for (int x = 0; x < 5; x++)           //Poté, co si je uživatel prohlídne a vrátí se zpátky do menu se vytisknou všechny grafické artikly
                        {
                            Labels[x].Print(x == 4, Reprint); //Artikl s pozicí 4, kterým je velký obdélník okolo celé obrazovky, se vytiskne s širokými svislými liniemi. 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 vytiskne se toto menu znovu od začátku
                        }
                        break;

                    case 2:                  //Pokud je ChosenLabel 2, tedy vybraným tlačítkem je Quit
                        Environment.Exit(0); //Ukončí se program s výstupním kódem 0
                        break;
                    }
                    break;

                case ConsoleKey.R:     //Pokud uživatel zmáčkne R zavolá se metoda Reprint
                    try
                    {
                        Reprint();                      //Pokusí se vymazat menu a vytisknout jej znovu
                    }
                    catch (ArgumentOutOfRangeException) //Pokud nastane situace, že něco by se mělo tisknout mimo obrazovku
                    {
                        WaitForFix();                   //Vyzve uživatele, aby zvětšil hru na celou obrazovku a nepustí ho dál dokud tak neučiní
                        Reprint();                      //Znovu se pokusí vymazat menu a vytisknout jej znovu
                    }
                    break;
                }
            }
        }
        private static bool EnableSwitch()
        {
            ///Shrnutí
            ///Tato metoda umožní hráči dělat akce v tomto menu
            ///Vrací bool, podle toho zda má hráč zájem hrát znovu (true: hrát znovu/false: konec hry)
            foreach (IGraphic label in Labels) //Nejprve se vytisknou všechny grafické objekty,
            {
                if (label == null)             //které nejsou null
                {
                    continue;
                }
                label.Print(label.GetType() == (typeof(Border)), Reprint); //Oba bordery se vytisknou se silnými svislými liniemi. 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 vytiskne se menu znovu
            }
            ConsoleKey keypressed;                                         //Budeme opět číst klávesu od uživatele

            do                                                             //Začne do while cyklus, který trvá dokud uživatel nezmáčkne Enter
            {
                for (int x = 0; x < 4; x++)                                //Nejprve se vytisknou všechny grafické objekty,
                {
                    if (SwitchableLabels[x] == null)                       //které nejsou null
                    {
                        continue;
                    }
                    SwitchableLabels[x].Print(x == ChosenLabel, Reprint); //Vybrané tlačítko 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 vytiskne se menu znovu
                }
                keypressed = Console.ReadKey(true).Key;                   //Nyní přečteme klávesu od uživatele
                switch (keypressed)
                {
                case ConsoleKey.UpArrow:                                               //Pokud uživatel zmáčkne šipku nahoru
                    if (ChosenLabel != 0 && SwitchableLabels[ChosenLabel - 1] != null) //Ověří se, zda již nejsme úplně nahoře (Buď se ChosenLabel rovná nule nebo se tlačítko o jedna výš rovná null)
                    {
                        ChosenLabel--;                                                 //Pokud nejsme, sníží se ChosenLabel o jedna
                    }
                    break;

                case ConsoleKey.DownArrow:    //Pokud uživatel zmáčkne šipku dolů
                    if (ChosenLabel != 3)     //Pokud se nenacházíme již úplně dole (na pozici tři), zvýší se ChosenLabel o jedna
                    {
                        ChosenLabel++;
                    }
                    break;

                case ConsoleKey.R:     //Pokud uživatel zmáčkne R zavolá se metoda Reprint
                    try
                    {
                        Reprint();                      //Pokusí se vymazat menu a vytisknout jej znovu
                    }
                    catch (ArgumentOutOfRangeException) //Pokud nastane situace, že něco by se mělo tisknout mimo obrazovku
                    {
                        Program.WaitForFix();           //Vyzve uživatele, aby zvětšil hru na celou obrazovku a nepustí ho dál dokud tak neučiní
                        Reprint();                      //Znovu se pokusí vymazat menu a vytisknout jej znovu
                    }
                    break;
                }
            } while (keypressed != ConsoleKey.Enter); //Když hráč zmáčkne Enter tak se pokračuje podle toho, které tlačítko bylo vybráno
            switch (ChosenLabel)
            {
            case 0:                                                                                                                                                                                                                                                            //Na pozici nula může být (v případě výhry) SaveHighscore (Uložit skóre), nebo (v případě prohry) View Minefield (Zobrazit minové pole)
                if (GameWon)                                                                                                                                                                                                                                                   //Pokud byla hra vyhraná, tak se jde uložit skóre
                {
                    SwitchableLabels[0].Print(false, Reprint);                                                                                                                                                                                                                 //Přetiskne toto tlačítko bez zvýraznění
                    SaveHighscore();                                                                                                                                                                                                                                           //Zavolá se metoda SaveHighscore(), která uloží hru
                    SwitchableLabels[0] = null;                                                                                                                                                                                                                                //Toto tlačítko se změní na null, aby nebylo možné toto skóre ukládat znovu
                    Labels[5]           = null;
                    ChosenLabel         = 1;                                                                                                                                                                                                                                   //Chosen Label se automaticky změní na 1, aby nebylo vybrané tlačítko nula
                }
                else                                                                                                                                                                                                                                                           //Pokud byla hra prohraná, tak se zobrazí znovu Hrací plocha s vyznačenými minami vlaječkou
                {
                    if (((Console.LargestWindowWidth - 5) > Console.WindowWidth) || ((Console.LargestWindowHeight - 3) > Console.WindowHeight))                                                                                                                                //Nejprve zkontroluje zda je hra zobrazena na celou obrazovku, jinak by se mohly grafiky špatně vytvořit
                    {
                        Program.WaitForFix();                                                                                                                                                                                                                                  //Případně počká na opravu od uživatele
                    }
                    GameControls.PlayedGame.PrintMinefield(true);                                                                                                                                                                                                              //Vytiskne se znovu hrací plocha, ale všechny políčka s minou se označí vlaječkou
                    (new Border(new Coordinates(GameControls.PlayedGame.Minefield[0, 0].Position, -2, -1), GameControls.PlayedGame.VerticalTiles + 2, 2 * (GameControls.PlayedGame.HorizontalTiles + 2), ConsoleColor.Black, ConsoleColor.White, false)).Print(true, Reprint); //Vytvoří se rámeček okolo hrací plochy a okamžitě se vytiskne. 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 vytiskne se menu znovu
                    (new Border(0, 1, Console.WindowHeight - 1, Console.WindowWidth, ConsoleColor.Black, ConsoleColor.Gray, false)).Print(true, Reprint);                                                                                                                      //Vytvoří se rámeček okolo obrazovky a okamžitě se vytiskne. 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 vytiskne se menu znovu
                    Console.ReadKey();                                                                                                                                                                                                                                         //Hrací plocha zůstane zobrazená dokud uživatel nezmáčkne klávesu
                    Console.BackgroundColor = ConsoleColor.Black;                                                                                                                                                                                                              //Poté se celá Console vyčistí
                    Console.Clear();
                }
                return(EnableSwitch());                           //A vrátíme se zpátky na začátek této metody

            case 1:                                               //Pokud je zmáčknuto Play Again, tak se chceme vrátit zpátky do menu, kde nastavujeme hru
                foreach (GameMenu menu in DiffSwitcher.GameMenus) //U všech menu nastavíme ChosenLine zpátky na nulu
                {
                    if (menu == null)                             //Pokud samozřejmě není menu == null
                    {
                        continue;
                    }
                    menu.ChooseLine(0);
                }
                Console.BackgroundColor = ConsoleColor.Black;
                Console.Clear();                                                                                                  //Console se vyčistí a přejdeme zpátky do DiffSwitcheru
                DiffSwitcher.PrintGraphics(true);                                                                                 //DiffSwitcher vytiskne všechny své grafiky
                DiffSwitcher.SwitchTo(DiffSwitcher.ChosenMenu, true);                                                             //Přejdeme na vybrané menu
                GameControls.PlayedGame = DiffSwitcher.EnableSwitch();                                                            //Zavoláme metodu EnableSwitch() pomocí, které vytvoříme hru, kterou vložíme do GameControls.PlayedGame()
                return(true);                                                                                                     //Vrátí se true a hráč poté může hru rovnou začít hrát

            case 2:                                                                                                               //Pokud je zmáčknuto Play Again with the same parameters, tak se okamžitě vytvoří hra se stejnými parametry
                Console.BackgroundColor = ConsoleColor.Black;
                Console.Clear();                                                                                                  //Vyčistí se Console
                (new PositionedText("Loading...", ConsoleColor.Black, (Console.WindowWidth - 10) / 2, 12)).Print(false, Reprint); //Vytvoří a vytiskne text Loading... U větších minefieldů může tvorba hry chvilku trvat, čili aby bylo jasné, že se nejdná o chybu a skutečně se něco děje
                int[] parameters = GameControls.PlayedGame.GetParameters();                                                       //Získají se parametry ze hry, která byla právě dohrána
                GameControls.PlayedGame = new Game(parameters);                                                                   //A vytvoří se pomocí nich nová hra
                return(true);                                                                                                     //Vrátí se true a hráč poté může hru rovnou začít hrát

            case 3:                                                                                                               //Pokud je zmáčknuto Quit, tak se program ukončí
                Environment.Exit(0);                                                                                              //Program se ukončí s kódem 0
                return(false);
            }
            return(false);
        }