} //Field který označuje zvolené menu public static void StartMenu(bool resetColours) { ///Shrnutí ///Počáteční metoda menu. Zde se nastaví výchozí nastavení a menu se vytiskne if (((Console.LargestWindowWidth - 5) > Console.WindowWidth) || ((Console.LargestWindowHeight - 3) > Console.WindowHeight)) //Nejprve zajistí, že je hra na celou obrazovku, jinak by mohly grafické objekty mít špatnou pozici. { Program.WaitForFix(); //Pokud není, počká se dokud to uživatel nenapraví } GameMenus = new GameMenu[4]; //Vytvoří se Array pro čtyři různá nastavení GameMenus[0] = new GameMenu("Easy", Difficulties.Easy); //První (nulté) místo zabere lehká obtížnost GameMenus[1] = new GameMenu("Medium", Difficulties.Medium); //Druhé (první) místo zabere střední obtížnost GameMenus[2] = new GameMenu("Hard", Difficulties.Hard); //Třetí (druhé) místo zabere těžká obtížnost GameMenus[3] = null; //Čtvrté (třetí) místo zůstane zatím prázdné, zde se později bude vytvářet vlastní nastavení (objekt třídy CustomGameMenu), které může uživatel upravovat ChosenMenu = 0; //Výchozí menu je jednoduchá obtížnost, a proto se nastaví field ChosenMenu na nulu SetDefault(resetColours); //Pokud je vstupní hodnota resetColours true, tedy pokud otevíráme menu nastavení hry poprvé, tak se zavolá metoda SetDefault, kde se nastaví prvotní nastavení pro barvy SwitchTo(0, true); //Následně se zavolá metoda SwitchTo, která zobrazí menu Lehké obtížnosti a zvýrazní název menu, aby uživatel věděl, že nyní může přepínat mezi obtížnostmi Game newGame = EnableSwitch(); //Nyní se zavolá metoda EnableSwitch, která umožní vybírat mezi obtížnostmi a vytvářet vlastní obtížnost. Tato metoda vrací objekt typu Game if (newGame == null) //Pokud uživatel opustí metodu, aniž by hru vytvořil tak se vrátíme zpátky do prvního menu, kde je možné toto menu opět zobrazit nebo hru ukončit { return; } GameControls.PlayedGame = newGame; //V opačném případě se do další statické třídy, tedy do GameControls načte hraná hra a bude možné již brzy ji začít hrát Console.BackgroundColor = ConsoleColor.Black; Console.Clear(); //Menu se vymaže bool UserWantsToPlayAgain; //Tento boolean nám bude určovat zda chce hrát hráč znovu do //Začíná cyklus do while, který probíhá, dokud platí, že hráč chce hrát znovu { if (GameControls.PlayedGame == null) //Pokud se stane, že se nevytvoří žádná hra, protože uživatel zruší vybírání v menu, tak se metoda vrátí zpátky do prvního menu { return; } GameControls.PlayedGame.PrintMinefield(); //Jinak se zavolá metoda, která vytiskne celou herní plochu a připravujeme se k samotnému hraní hry GameControls.PlayedGame.TilesAndMinesAroundCalculator(); //Nyní se zavolá metoda, která pro každý Tile vytvoří seznam tilů okolo a spočítá, kolik z nich má minu GameControls.SetDefault(); //Nakonec se ještě nastaví výchozí nastavení. Například se vytvoří a vytisknou grafiky nebo se nastaví důležité Fieldy na nulu (například počet odkrytých políček nebo počrt umístěných vlajek) bool gameWon = GameControls.Gameplay(out decimal score, out SpecialisedStopwatch playTime); //Nyní se už dostáváme k samotnému Gameplayi. Tato metoda nám vrátí tři hodnoty: boolean zda byla hra vyhrána, skóre hráče a čas, který hráč potřeboval na vyřešení této hry if (score != -1) //Pokud hráč opustí hru v jejím průběhu, vrátí se nám skóre -1, v takovém případě se vrátíme zpátky do hlavního menu. { UserWantsToPlayAgain = PostGameMenu.ShowMenu(score, gameWon, playTime); //Jinak se dostaneme do další statické třídy PostGameMenu, kde si může hráč zahrát znovu, uložit skóre, podívat se na hrací plochu, zahrát si znovu nebo hru ukončit } else { UserWantsToPlayAgain = false; } } while (UserWantsToPlayAgain); }