SHARE
TWEET

Untitled

a guest Apr 18th, 2019 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8. namespace BullsNCows
  9. {
  10.     class Program
  11.     {
  12.         static int maxTries = 0;
  13.         static Game game;
  14.         static string[] SaveFileResults;
  15.         static int Try = 0;
  16.         static string UserGuess = "";
  17.         static string com;
  18.         static string SaveFilePath;
  19.         static bool Victory;
  20.  
  21.         static void Main(string[] args)
  22.         {
  23.             SaveFilePath = @"D:\University Homework\Console Applications\BullsNCows\BullsNCows\bin\Release\SaveFile.txt";
  24.             SaveFileResults = File.ReadAllLines(SaveFilePath);
  25.             Console.WriteLine("Welcome to Bulls N Cows! Please enter settings.");
  26.             while (true)
  27.             {
  28.                 //settings
  29.                 Settings();
  30.                 //game start
  31.                 com = game.GenerateRandomWord();
  32.                 GameProgress();
  33.                 //check if user won and display a message accordingly
  34.                 if (Victory) PlayerWon();
  35.                 else Console.WriteLine($"Sorry! My word was: {com}.");
  36.  
  37.                 //ask if user wants to play again
  38.                 bool gameOn = true, choose = false;
  39.                 while (!choose)
  40.                 {
  41.                     ExitOrStay(ref gameOn, ref choose);
  42.                 }
  43.                 Console.Clear();
  44.                 if (!gameOn) break;
  45.             }
  46.             Console.WriteLine("Thanks for playing!");
  47.         }
  48.         static int ReadInputLength()
  49.         {
  50.             int length = 0;
  51.             bool IsValid;
  52.             do
  53.             {
  54.                 string line = Console.ReadLine();
  55.                 IsValid = int.TryParse(line, out length) && length >= 3 && length <= 9;
  56.                 if (!IsValid) Console.WriteLine("Error. Word length must be integer and between 3 and 9. Try again.");
  57.             } while (!IsValid);
  58.             return length;
  59.         }
  60.         static int ReadMaxTries(int length)
  61.         {
  62.             bool IsValid;
  63.             do
  64.             {
  65.                 string line = Console.ReadLine();
  66.                 IsValid = int.TryParse(line, out maxTries) && maxTries > 0;
  67.                 if (!IsValid) Console.WriteLine("Error. Number of tries must be integer and more than 0. Try again.");
  68.                 else if (maxTries < length * 2 - 4) Console.WriteLine("Really? You're THAT confident? Okay then, go for it!");
  69.                 else if (maxTries > length * 10) Console.WriteLine("Lacking skills? It's okay, I won't judge.");
  70.             } while (!IsValid);
  71.             return maxTries;
  72.         }
  73.         static string ReadUserGuess()
  74.         {
  75.             bool IsValid = false;
  76.             string UserInput = "";
  77.             while (!IsValid)
  78.             {
  79.                 do
  80.                 {
  81.                     UserInput = Console.ReadLine();
  82.                     //check that input length matches the word length
  83.                     IsValid = UserInput.Length == game.GetWordLength();
  84.                     if (!IsValid)
  85.                     {
  86.                         Console.WriteLine("Error. Input length must match word length settings. Try again.");
  87.                         break;
  88.                     }
  89.                     //check for input being letters from a to z
  90.                     for (int i = 0; i < UserInput.Length; i++)
  91.                     {
  92.                         IsValid = UserInput[i] >= 97 && UserInput[i] <= 122;
  93.                         if (!IsValid) break;
  94.                     }
  95.                     if (!IsValid)
  96.                     {
  97.                         Console.WriteLine("Error. Guess must contain letters from a to z. Try again.");
  98.                         break;
  99.                     }
  100.                     //check that letters do not repeat
  101.                     for (int i = 0; i < UserInput.Length; i++)
  102.                     {
  103.                         if (!IsValid) break;
  104.                         for (int j = 0; j < UserInput.Length; j++)
  105.                         {
  106.                             if (j != i)
  107.                             {
  108.                                 IsValid = UserInput[j] != UserInput[i];
  109.                                 if (!IsValid) break;
  110.                             }
  111.                         }
  112.                     }
  113.                     if (!IsValid)
  114.                     {
  115.                         Console.WriteLine("Error. Letters in guess must be unique. Try Again.");
  116.                         break;
  117.                     }
  118.                 } while (!IsValid);
  119.             }
  120.             return UserInput;
  121.         }
  122.         static void ExitOrStay(ref bool gameOn, ref bool choose)
  123.         {
  124.             Console.WriteLine("Do you want to play again? Enter y or n. Press L to see the results screen.");
  125.             ConsoleKeyInfo input = Console.ReadKey();
  126.             switch (input.Key)
  127.             {
  128.                 case ConsoleKey.Y:
  129.                     choose = true;
  130.                     break;
  131.                 case ConsoleKey.N:
  132.                     choose = true;
  133.                     gameOn = false;
  134.                     break;
  135.                 case ConsoleKey.L:
  136.                     Console.WriteLine();
  137.                     DisplayResults();
  138.                     break;
  139.                 default:
  140.                     Console.WriteLine("Error. Enter only y or n.");
  141.                     break;
  142.             }
  143.         }
  144.         static void Settings()
  145.         {
  146.             Console.WriteLine("How long do you want the word? (in letters, at least 3 and at most 9):");
  147.             int length = ReadInputLength();
  148.             game = new Game(length);
  149.             Console.WriteLine("Okay, got it! And how many tries would you like? I'd recommend " + (5 * length) + ":");
  150.             maxTries = ReadMaxTries(length);
  151.             Console.WriteLine("Okay! Starting game. Can you guesss my word?");
  152.         }
  153.         static void DisplayResults()
  154.         {
  155.             for (int i = 0; i < SaveFileResults.Length; i++)
  156.             {
  157.                 Console.WriteLine(SaveFileResults[i]);
  158.             }
  159.             Console.ReadKey();
  160.         }
  161.         static void GameProgress()
  162.         {
  163.             for (; Try < maxTries; Try++)
  164.             {
  165.                 Console.Write($"Try #{Try + 1} out of {maxTries}: ");
  166.                 UserGuess = ReadUserGuess();
  167.                 Victory = game.HasUserWon(UserGuess, com, out int bull, out int cow);
  168.                 //display the number of Bulls and Cows counted
  169.                 Console.WriteLine($"Bull: {bull}\nCow: {cow}");
  170.                 if (Victory) break; //if the user succeeded, exit the guessing loop
  171.             }
  172.         }
  173.         static void PlayerWon()
  174.         {
  175.             Console.WriteLine($"You won! My word was indeed {UserGuess}! Please enter you name: ");
  176.             string name = Console.ReadLine();
  177.             int index = SaveFileResults.Length;
  178.             Array.Resize(ref SaveFileResults, SaveFileResults.Length + 1);
  179.             SaveFileResults[index] = $"Name: {name}, tries: {Try + 1} / {maxTries}, word length: {game.GetWordLength()}";
  180.             File.WriteAllLines(SaveFilePath, SaveFileResults);
  181.         }
  182.     }
  183. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top