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 }
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); }