Exemple #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Zadejte velikost mřížky.");
            Console.WriteLine("Volte čísla v rozsahu {0} - {1}", Minesweeper.Minesweeper.minGridSize, Minesweeper.Minesweeper.maxGridSize);
            Console.WriteLine("Pro hodnotu 9 bude velikost mřížky 9x9");
            int size = 0;

            do             // Uživatel se musí trefit do povoleného rozsahu velikostí
            {
                try
                {
                    Console.Write("Velikost [{0}]: ", Minesweeper.Minesweeper.defaultGridSize);
                    size = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    size = Minesweeper.Minesweeper.defaultGridSize;
                }
            } while ((size < Minesweeper.Minesweeper.minGridSize) || (size > Minesweeper.Minesweeper.maxGridSize));
            Console.WriteLine();

            // Vytvoříme a vygenerujeme herní desku
            Minesweeper.Minesweeper m = new Minesweeper.Minesweeper();
            m.size = size;
            m.generateMines();

            char action = ' ';

            do             // Uživatel prozkoumává herní desku a označuje miny, dokud neřekne, že má hotovo
            {
                // Nejdříve se vyčistí obrazovka
                Console.Clear();

                // Vypíšeme statistiky
                TUI.printStats(m.stats);

                TUI.printGrid(m.size, m.cells);
                Console.WriteLine();
                Console.WriteLine("Na kterou hodnotu chcete kliknout?");
                Console.WriteLine("Zadejte operaci následovanou dvěma čísly oddělenýmy mezerou.");
                Console.WriteLine("Operace jsou:\n s (stoupnout), m (označit minu), u (zrušit označení), q (vyhodnotit).");
                Console.WriteLine("První číselná hodnota reprezentuje osu X, druhá osu Y");
                Console.Write("\nVstup: ");

                // Parsujeme vstup [1/2]
                int x = 0, y = 0;
                try
                {
                    string[] input = Console.ReadLine().Split();
                    action = char.Parse(input[0]);

                    // Pokud uživatel řekl, že už má hotovo
                    if (action == 'q')
                    {
                        break;
                    }

                    // Parsujeme vstup [2/2]
                    x = int.Parse(input[1]);
                    y = int.Parse(input[2]);
                }
                catch { };

                // Pokud uživatel zadal neexistující souřadnice
                if (m.cells.get(x, y) == null)
                {
                    TUI.pressAnyKeyToContinue(
                        "\nNeplatné souřadnice.\n"
                        + "Pokračujte stiskem libovolné klávesy ..."
                        );
                    continue;
                }

                // Pokud by chtěl uživatel provést na prozkoumaných souřadnicích
                if (m.cells.get(x, y).value >= 0)
                {
                    TUI.pressAnyKeyToContinue(
                        "\nNelze provést operaci na daných souřadnicích. Jsou již prozkoumané.\n"
                        + "Pokračujte stiskem libovolné klávesy ..."
                        );
                    continue;
                }

                // Provedeme požadovanou akci s požadovanými souřadnicemi
                m.action(action, x, y);

                // Pokud uživatel stoupl na minu
                if ((action == 's') && (m.toBeOrNotToBe(x, y)))
                {
                    break;
                }
            } while (true);             // Cyklus je ukončen zevnitř

            TUI.printHorizontalBorder();

            // Pokud uživatel stoupl na minu
            if (action == 's')
            {
                Console.WriteLine("Stoupl jste na minu a umřete za 3... 2... 1...");
                Console.WriteLine("Smůla. Jste mrtvý. Zkuste to znovu :-)");
            }
            else
            {
                // Pokud uživatel označil miny na správných místech
                if (m.foundAllAndOnlyMines())
                {
                    Console.WriteLine("Jste rozený profík! Našel jste všechny miny.");
                }
                else
                {
                    Console.WriteLine("Bohužel jste neoznačil všechny miny správně. Doufejme, že na ně nikdo nešlápne.");
                }
            }
            TUI.pressAnyKeyToContinue("\nStisknutím libovolné klávesy ukončíte program");
        }