示例#1
0
        }                             //Herní plocha

        public Game(int[] parameters) //Konstruktor, který vytvoří z parametrů z menu nastavení hry samotnou hru
        {
            HorizontalTiles  = parameters[0];
            VerticalTiles    = parameters[1];
            Mines            = parameters[2];
            Cover            = (ConsoleColor)parameters[3];
            CoverSecondary   = (ConsoleColor)parameters[4];
            Uncover          = (ConsoleColor)parameters[5];
            UncoverSecondary = (ConsoleColor)parameters[6];
            Flag             = (ConsoleColor)parameters[7];
            Highlight        = (ConsoleColor)parameters[8];
            Text             = (ConsoleColor)parameters[9];                //Nahrají se veškeré fieldy
            Minefield        = new Tile[HorizontalTiles, VerticalTiles];   //Vytvoří se prázdné minové pole
            int          remainingMines = Mines;                           //Nyní se pomocí třídy Random určí, která políčka budou mít miny
            int          remainingTiles = HorizontalTiles * VerticalTiles; //Máme dvě proměnné: Zbývající miny a zbývající políčka
            ConsoleColor currentColour;                                    //Také se každému políčku přiřadí jeho první barva
            Random       rng = new Random();
            bool         mine;

            for (int x = 0; x != HorizontalTiles; x++)
            {
                if (x % 2 == 0)
                {
                    currentColour = Cover; //Pokud jsme v lichém řádku, políčko úplně vlevo bude mít první barvu (Cover)
                }
                else
                {
                    currentColour = CoverSecondary; //Pokud jsme v sudém, políčko bude mít druhou barvu (Cover Secondary)
                }
                for (int y = 0; y != VerticalTiles; y++)
                {
                    int mineDeterminator = rng.Next(remainingTiles); //Nyní se vygeneruje náhodné číslo od nuly do počtu zbývajících políček
                    if (mineDeterminator < remainingMines)           //Pokud je náhodné číslo nižší než počet zbývajících min,
                    {
                        mine = true;                                 //tak následující políčko bude mít minu,
                        remainingMines--;                            //Samozřejmě se sníží počet zbývajících min a políček
                        remainingTiles--;
                    }
                    else
                    {
                        mine = false;                                                                                                                                                    //jinak následující políčko minu mít nebude
                        remainingTiles--;                                                                                                                                                //A sníží se jen počet zbývajících políček
                    }
                    Minefield[x, y] = new CoveredTile(mine, currentColour, (Console.WindowWidth / 2 - HorizontalTiles + 2 * x), y + ((Console.WindowHeight - VerticalTiles) / 2), x, y); //Na pozici x, y se vytvoří nové políčko s minou určenou náhodným generátorem, souřadnicemi x, y a souřadnicemi v Consoli, které jsou propočítany tak, aby se Minefield nacházel ve středu obrazovky
                    if (currentColour == Cover)                                                                                                                                          //nyní se změní currentColour, aby následující políčko mělo jinou barvu a tvořila se „šachovnice“
                    {
                        currentColour = CoverSecondary;
                    }
                    else
                    {
                        currentColour = Cover;
                    }
                }
            }
        }
示例#2
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();
                }
            }
        }