Exemple #1
0
        private static void CheckConstructor()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            if (number < 1 || number > 100)
            {
                ReportError("SecretNumber(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            }
        }
Exemple #2
0
        private static void CheckMakeGuessRight()
        {
            var  sn = new SecretNumber();
            bool result;

            using (new NullOut())
            {
                result = sn.MakeGuess((int)GetFieldValue(sn, "_number"));
            }
            if (!result)
            {
                ReportError("MakeGuess(): MakeGuess returnerar inte true då det gissade talet är lika med det hemliga talet.");
            }
        }
Exemple #3
0
        private static void CheckCountField()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            if ((int)GetFieldValue(sn, "_count") != 0)
            {
                ReportError("_count: _count är inte 0 trots att ingen gissning gjorts.");
            }

            int count = 0;

            for (int i = 94; i <= 100; i++)
            {
                using (new NullOut())
                {
                    sn.MakeGuess(i);
                }
                if ((int)GetFieldValue(sn, "_count") != ++count)
                {
                    ReportError(String.Format("_count: _count är inte {0} trots att {0} gissning(ar) gjorts.", count));
                }
            }

            try
            {
                using (new NullOut())
                {
                    sn.MakeGuess(number);
                }
            }
            catch
            {
                // Eat!
            }

            if ((int)GetFieldValue(sn, "_count") != 7)
            {
                ReportError("_count: _count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
            }
        }
Exemple #4
0
        private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1()
        {
            var sn = new SecretNumber();

            try
            {
                using (new NullOut())
                {
                    sn.MakeGuess(0);
                }
                ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal mindre än 1.");
            }
            catch (ArgumentOutOfRangeException)
            {
                // Eat!
            }
        }
Exemple #5
0
        private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100()
        {
            var sn = new SecretNumber();

            try
            {
                using (new NullOut())
                {
                    sn.MakeGuess(101);
                }
                ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100.");
            }
            catch (ArgumentOutOfRangeException)
            {
                // Eat!
                return;
            }
        }
Exemple #6
0
        private static void CheckMakeGuessIfItsPossibleToGuessMoreThanSevenTimes()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            } while (number >= 94);

            using (new NullOut())
            {
                for (int i = 94; i <= 100; i++)
                {
                    sn.MakeGuess(i);
                }
            }

            try
            {
                using (new NullOut())
                {
                    sn.MakeGuess(number);
                }
            }
            catch (ApplicationException)
            {
                // Eat!
                return;
            }
            catch
            {
                // Eat!
            }
            ReportError("MakeGuess(): ApplicationsException kastas inte då fler gissningar än sju görs.");
        }
Exemple #7
0
        private static void CheckMakeGuessHigh()
        {
            var sn = new SecretNumber();
            int number, prevNumber, loopCount = 5;

            do
            {
                prevNumber = (int)GetFieldValue(sn, "_number");
                Thread.Sleep(100);
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                if (number < 1 || number > 100)
                {
                    ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
                }
                if (prevNumber == number)
                {
                    if (--loopCount == 0)
                    {
                        ReportError("Initialize(): _number verkar inte slumpas");
                        return;
                    }
                }
            } while (number > 99);

            bool result;

            using (new NullOut())
            {
                result = sn.MakeGuess(100);
            }
            if (result)
            {
                ReportError("MakeGuess(): MakeGuess returnerar inte false då det gissade talet är större än det hemliga talet.");
            }
        }
Exemple #8
0
        private static void CheckInitialize()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            var count  = (int)GetFieldValue(sn, "_count");

            using (new NullOut())
            {
                sn.MakeGuess(Math.Max(number ^ 3, 1));
            }
            Thread.Sleep(100);
            sn.Initialize();

            number = (int)GetFieldValue(sn, "_number");
            if (number < 1 || number > 100)
            {
                ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            }

            if ((int)GetFieldValue(sn, "_count") != 0)
            {
                ReportError("Initialize(): _count initieras inte till 0.");
            }
        }
Exemple #9
0
        static void Main(string[] args)
        {
            Console.Title = "Gissa det hemliga talet - nivå A";

            // Testa grundläggande krav på klassen SecretNumber.
            Test.Run();

            // Deklarera och initiera lokala variabler.
            bool         continueGame = false;
            int          number       = 0;
            SecretNumber secretNumber = new SecretNumber();

            // Upprepa spelomgångar tills användaren avslutar genom att
            // trycka ner tangenten 'N'.
            do
            {
                // Initiera ny spelomgång.
                secretNumber.Initialize();

                // Rensa konsolfönstret och skriv ut ledtext.
                Console.Clear();
                Console.BackgroundColor = ConsoleColor.DarkGreen;
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(" ╔══════════════════════════════════════╗ ");
                Console.WriteLine(" ║ Gissa det hemliga talet mellan 1-100 ║ ");
                Console.WriteLine(" ╚══════════════════════════════════════╝ ");
                Console.ResetColor();

                // Låt användaren gissa maximalt tillåtet gånger.
                for (int i = 1; i <= SecretNumber.MaxNumberOfGuesses; i++)
                {
                    // Läs in en gissning i det slutna intervallet mellan 1 och 100.
                    Console.ForegroundColor = ConsoleColor.White;
                    do
                    {
                        Console.Write("\nGissning {0}: ", i);
                    } while (!(int.TryParse(Console.ReadLine(), out number) &&
                               number >= 1 && number <= 100));
                    Console.ResetColor();
                    Console.WriteLine();

                    try
                    {
                        // Gissa och avsluta spelomgången om gissningen är rätt.
                        if (secretNumber.MakeGuess(number))
                        {
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Ett oväntat fel inträffade! Programmet avbryts.");
                        Console.WriteLine(ex.Message);
                        return;
                    }
                }
                Console.BackgroundColor = ConsoleColor.DarkGreen;
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("\n    Nytt hemligt nummer? [N] avbryter.    ");
                Console.CursorVisible = false;
                continueGame          = Console.ReadKey(true).Key != ConsoleKey.N;
                Console.CursorVisible = true;
                Console.ResetColor();
            } while (continueGame);
        }