예제 #1
0
        private static void CheckInitialize()
        {
            var sn             = new SecretNumber();
            var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[];
            int number;

            do
            {
                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.");
                }
            } while (number >= 94);

            if (guessedNumbers != null && guessedNumbers != GetFieldValue(sn, "_guessedNumbers") as int[])
            {
                ReportError("Initialize(): _guessedNumber återanvänds inte utan tilldelas en referens till en helt ny array.");
            }

            if (sn.Count != 0)
            {
                ReportError("Initialize(): Count initieras inte till 0.");
            }
            if (!sn.CanMakeGuess)
            {
                ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true.");
            }
            else
            {
                using (new NullOut())
                {
                    for (int i = 94; i <= 100; i++)
                    {
                        sn.MakeGuess(i);
                    }
                }
                sn.Initialize();

                if (sn.Count != 0)
                {
                    ReportError("Initialize(): Count initieras inte till 0.");
                }
                if (!sn.CanMakeGuess)
                {
                    ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true.");
                }

                guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");
                foreach (var gn in guessedNumbers)
                {
                    if (gn != 0)
                    {
                        ReportError("Initialize(): _guessedNumbers töms inte på gamla gissningar.");
                        break;
                    }
                }
            }
        }
예제 #2
0
        private static void CheckMakeGuessOldGuess()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                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.");
                }
            } while (number > 50);
            using (new NullOut())
            {
                sn.MakeGuess(51);
            }
            var count = sn.Count;

            using (new NullOut())
            {
                sn.MakeGuess(51);
            }
            if (count != sn.Count)
            {
                ReportError("MakeGuess(): En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning.");
            }
        }
예제 #3
0
        private static void CheckGuessesLeft()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

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

            if (sn.GuessesLeft != 7)
            {
                ReportError("Count: GuessesLeft är inte 7 trots att ingen gissning gjorts.");
            }

            int count = 0;

            for (int i = 94; i <= 100; i++)
            {
                using (new NullOut())
                {
                    sn.MakeGuess(i);
                }
                if (sn.Count != ++count)
                {
                    ReportError(String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count));
                }
            }
        }
        public void CheckCountProperty()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            Assert.IsTrue(sn.Count == 0, "Egenskapen Count är inte 0 trots att ingen gissning gjorts.");

            int count = 0;
            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
                Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count));
            }

            try
            {
                CallMakeGuess(sn, number);
                Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
            }
            catch (ApplicationException)
            {
                // Eat!
                return;
            }
            catch
            {
                // Eat!
            }
            Assert.Fail("ApplicationsException kastas inte då fler gissningar än sju görs.");
        }
        public void CheckConstructor()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");

            var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");
            Assert.IsNotNull(guessedNumbers, "_guessedNumbers har inte initierats.");
            Assert.IsTrue(guessedNumbers.Length == 7, "_guessedNumbers har inte sju element.");
        }
예제 #6
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.");
            }
        }
예제 #7
0
        private static void CheckCount()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

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

            if (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 (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 (sn.Count != 7)
            {
                ReportError("Count: Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
            }
        }
예제 #8
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!
            }
        }
예제 #9
0
        private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100()
        {
            var sn = new SecretNumber();

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

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

            bool result = false;

            using (new NullOut())
            {
                for (int i = 94; i <= 100; i++)
                {
                    if (!(result = sn.CanMakeGuess))
                    {
                        break;
                    }
                    sn.MakeGuess(i);
                }
            }

            if (!result)
            {
                ReportError("CanMakeGuess: CanMakeGuess är false fast en gissning ska kunna göras.");
            }
            if (sn.CanMakeGuess)
            {
                ReportError("CanMakeGuess: CanMakeGuess är true fast en gissning inte ska kunna göras.");
            }

            sn.Initialize();
            using (new NullOut())
            {
                sn.MakeGuess((int)GetFieldValue(sn, "_number"));
            }
            if (sn.CanMakeGuess)
            {
                ReportError("CanMakeGuess: CanMakeGuess är true trots att rätt tal redan gissats.");
            }
        }
        public void CheckCanMakeGuessProperty()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            for (int i = 94; i <= 100; i++)
            {
                Assert.IsTrue(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte true trots att alla gissningar inte gjorts.");
                CallMakeGuess(sn, i);
            }
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att sju gissningar gjorts.");

            sn.Initialize();
            CallMakeGuess(sn, (int)GetFieldValue(sn, "_number"));
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts.");
        }
예제 #12
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.");
            }

            var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[];

            if (guessedNumbers == null)
            {
                ReportError("SecretNumber(): _guessedNumbers har inte initierats.");
            }

            if (guessedNumbers != null && guessedNumbers.Length != 7)
            {
                ReportError("SecretNumber(): _guessedNumbers har inte sju element.");
            }
        }
예제 #13
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.");
        }
예제 #14
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.");
            }
        }
예제 #15
0
        private static void CheckInitialize()
        {
            var sn = new SecretNumber();
            var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[];
            int number;
            do
            {
                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.");
                }
            } while (number >= 94);

            if (guessedNumbers != null && guessedNumbers != GetFieldValue(sn, "_guessedNumbers") as int[])
            {
                ReportError("Initialize(): _guessedNumber återanvänds inte utan tilldelas en referens till en helt ny array.");
            }

            if (sn.Count != 0)
            {
                ReportError("Initialize(): Count initieras inte till 0.");
            }
            if (!sn.CanMakeGuess)
            {
                ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true.");
            }
            else
            {
                using (new NullOut())
                {
                    for (int i = 94; i <= 100; i++)
                    {
                        sn.MakeGuess(i);
                    }
                }
                sn.Initialize();

                if (sn.Count != 0)
                {
                    ReportError("Initialize(): Count initieras inte till 0.");
                }
                if (!sn.CanMakeGuess)
                {
                    ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true.");
                }

                guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");
                foreach (var gn in guessedNumbers)
                {
                    if (gn != 0)
                    {
                        ReportError("Initialize(): _guessedNumbers töms inte på gamla gissningar.");
                        break;
                    }
                }
            }
        }
예제 #16
0
        private static void CheckGuessesLeft()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            if (sn.GuessesLeft != 7)
            {
                ReportError("Count: GuessesLeft är inte 7 trots att ingen gissning gjorts.");
            }

            int count = 0;
            for (int i = 94; i <= 100; i++)
            {
                using (new NullOut())
                {
                    sn.MakeGuess(i);
                }
                if (sn.Count != ++count)
                {
                    ReportError(String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count));
                }
            }
        }
예제 #17
0
        private static void CheckCount()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            if (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 (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 (sn.Count != 7)
            {
                ReportError("Count: Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
            }
        }
예제 #18
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.");
            }

            var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[];
            if (guessedNumbers == null)
            {
                ReportError("SecretNumber(): _guessedNumbers har inte initierats.");
            }

            if (guessedNumbers != null && guessedNumbers.Length != 7)
            {
                ReportError("SecretNumber(): _guessedNumbers har inte sju element.");
            }
        }
예제 #19
0
        private static void CheckCanMakeGuess()
        {
            var sn = new SecretNumber();
            int number;
            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            } while (number >= 94);

            bool result = false;
            using (new NullOut())
            {
                for (int i = 94; i <= 100; i++)
                {
                    if (!(result = sn.CanMakeGuess))
                    {
                        break;
                    }
                    sn.MakeGuess(i);
                }
            }

            if (!result)
            {
                ReportError("CanMakeGuess: CanMakeGuess är false fast en gissning ska kunna göras.");
            }
            if (sn.CanMakeGuess)
            {
                ReportError("CanMakeGuess: CanMakeGuess är true fast en gissning inte ska kunna göras.");
            }

            sn.Initialize();
            using (new NullOut())
            {
                sn.MakeGuess((int)GetFieldValue(sn, "_number"));
            }
            if (sn.CanMakeGuess)
            {
                ReportError("CanMakeGuess: CanMakeGuess är true trots att rätt tal redan gissats.");
            }
        }
        public void CheckGuessesLeftProperty()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            Assert.IsTrue(sn.GuessesLeft == 7, "GuessesLeft är inte 7 trots att ingen gissning gjorts.");

            int count = 0;
            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
                Assert.IsTrue(sn.Count == ++count, String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count));
            }
        }
예제 #21
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.");
        }
 public void CheckMakeGuessLow()
 {
     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");
         Assert.IsTrue(number >= 1 && number <= 100, "Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
         if (--loopCount == 0)
         {
             Assert.IsTrue(prevNumber != number, "Initialize(): _number verkar inte slumpas.");
             return;
         }
     } while (number < 2);
     Assert.IsFalse(CallMakeGuess(sn, 1), "MakeGuess returnerar inte false då det gissade talet är mindre än det hemliga talet.");
 }
 public void CheckMakeGuessOldGuess()
 {
     var sn = new SecretNumber();
     var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1);
     CallMakeGuess(sn, guess);
     var count = sn.Count;
     Assert.IsFalse(CallMakeGuess(sn, guess), "MakeGuess returnerar inte false då det gissade talet är samma som en tidigare gissning.");
     Assert.IsTrue(count == sn.Count, "En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning.");
 }
 public void CheckMakeGuessRight()
 {
     var sn = new SecretNumber();
     Assert.IsTrue(CallMakeGuess(sn, (int)GetFieldValue(sn, "_number")), "MakeGuess returnerar inte true då det gissade talet är samma som det hemliga talet.");
 }
 public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1()
 {
     var sn = new SecretNumber();
     try
     {
         using (new NullOut())
         {
             sn.MakeGuess(0);
             throw new ApplicationException();
         }
     }
     catch (ArgumentOutOfRangeException)
     {
         // Eat!
         return;
     }
     catch
     {
         Assert.Fail("ArgumentOutOfRangeException kastas inte vid gissning på ett tal mindre än 1.");
     }
 }
예제 #26
0
 private static void CheckMakeGuessOldGuess()
 {
     var sn = new SecretNumber();
     int number;
     do
     {
         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.");
         }
     } while (number > 50);
     using (new NullOut())
     {
         sn.MakeGuess(51);
     }
     var count = sn.Count;
     using (new NullOut())
     {
         sn.MakeGuess(51);
     }
     if (count != sn.Count)
     {
         ReportError("MakeGuess(): En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning.");
     }
 }
 private static bool CallMakeGuess(SecretNumber sn, int guess)
 {
     using (new NullOut())
     {
         return sn.MakeGuess(guess);
     }
 }
예제 #28
0
 private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100()
 {
     var sn = new SecretNumber();
     try
     {
         using (new NullOut())
         {
             sn.MakeGuess(101);
         }
     }
     catch (ArgumentOutOfRangeException)
     {
         // Eat!
         return;
     }
     ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100.");
 }
예제 #29
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!
     }
 }
        static void Main(string[] args)
        {
            Console.Title = "Gissa det hemliga talet - nivå B";

            // 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.DarkYellow;
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(" ╔══════════════════════════════════════╗ ");
                Console.WriteLine(" ║ Gissa det hemliga talet mellan 1-100 ║ ");
                Console.WriteLine(" ╚══════════════════════════════════════╝ ");
                Console.ResetColor();

                // Låt användaren gissa så länge det finns gissningar kvar.
                while (secretNumber.CanMakeGuess)
                {
                    // Läs in en gissning i det slutna intervallet mellan 1 och 100.
                    Console.ForegroundColor = ConsoleColor.White;
                    do
                    {
                        Console.Write("\nGissning {0}: ", secretNumber.Count + 1);
                    } 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.DarkYellow;
                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);
        }
예제 #31
0
        private static void CheckMakeGuessLow()
        {
            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 < 2);

            bool result;
            using (new NullOut())
            {
                result = sn.MakeGuess(1);
            }
            if (result)
            {
                ReportError("MakeGuess(): MakeGuess returnerar inte false då det gissade talet är mindre än det hemliga talet.");
            }
        }
        static void Main(string[] args)
        {
            Console.Title = "Gissa det hemliga talet - nivå B";

            // 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.DarkYellow;
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(" ╔══════════════════════════════════════╗ ");
                Console.WriteLine(" ║ Gissa det hemliga talet mellan 1-100 ║ ");
                Console.WriteLine(" ╚══════════════════════════════════════╝ ");
                Console.ResetColor();

                // Låt användaren gissa så länge det finns gissningar kvar.
                while (secretNumber.CanMakeGuess)
                {
                    // Läs in en gissning i det slutna intervallet mellan 1 och 100.
                    Console.ForegroundColor = ConsoleColor.White;
                    do
                    {
                        Console.Write("\nGissning {0}: ", secretNumber.Count + 1);
                    } 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.DarkYellow;
                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);
        }
예제 #33
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.");
     }
 }
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;
            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
            }
            sn.Initialize();

            Assert.IsTrue(sn.Count == 0, "Count initieras inte till 0.");
            Assert.IsTrue(sn.CanMakeGuess, "CanMakeGuess initieras inte till true.");

            var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");
            foreach (var guess in guessedNumbers)
            {
                Assert.IsTrue(guess == 0, "_guessedNumbers verkar inte tömmas på gammal information.");
            }
        }