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."); } }
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."); } }
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."); } }
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! } }
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; } }
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."); }
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."); } }
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."); } }
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); }