Guessing Game

Eksemplet viser hvordan man kan lave et “spil”, der går ud på at gætte det hemmelige tal.

using System;

namespace guessing_game
{

  class Program
  {
    static void Main(string[] args)
    {
      int min = 1;
      if (args.Length > 1)
      {
        if (!int.TryParse(args[0], out min))
        {
          Console.Error.WriteLine("Invalid Argument: minimum must be an integer.");
          return;
        }
      }

      int max = 1000;
      if (args.Length > 0)
      {
        string maxStr = (args.Length > 1)? args[1]: args[0];
        if (!int.TryParse(maxStr, out max))
        {
          Console.Error.WriteLine("Invalid Argument: maximum must be an integer.");
          return;
        }
      }


      if (!(min < max))
      {
        Console.Error.WriteLine("Invalid Argument: minimum must be greater than maximum");
        return;
      }

      GuessingGame game = new GuessingGame(min, max);

      do
      {
        game.play();
      }
      while (game.wantsRematch());
    }
  }

  class GuessingGame
  {
    private int min;
    private int max;

    public GuessingGame(int max)
    {
      this.min = 1;
      this.max = max;
    }

    public GuessingGame(int min, int max)
    {
      this.min = min;
      this.max = max;
    }

    public bool wantsRematch()
    {
      Console.Write("Prøv igen? (Y/n): ");
      string answer = Console.ReadLine();
      bool isAfirmative = "y".Equals(answer.ToLower()) || "".Equals(answer);
      return isAfirmative;
    }

    public void play()
    {
      Random randomNumberGenerator = new Random();
      int secretNumber = randomNumberGenerator.Next(min, max);

      Console.WriteLine($"Gæt et tal mellem {min} og {max}");

      bool done = false;
      while (!done)
      {
        Console.Write("Skriv dit gæt: ");
        var guessLine = Console.ReadLine();

        bool isValidInteger = int.TryParse(guessLine, out int guess);
        if (!isValidInteger)
        {
          Console.WriteLine("Dit gæt skal være et tal!");
          continue;
        }

        bool isInValidRange = min <= guess && guess <= max;
        if (!isInValidRange)
        {
          Console.WriteLine($"Dit gæt skal være melem {min} og {max}!");
          continue;
        }

        if (guess == secretNumber)
        {
          Console.WriteLine($"Rigtigt! Flot gættet. Det hemmelige tal er {secretNumber}");
          done = true;
        }
        else
        {
          if (guess > secretNumber)
          {
            Console.WriteLine("Dit gæt er for højt");
          }
          if (guess < secretNumber)
          {
            Console.WriteLine("Dit gæt er for lavt");
          }

          Console.WriteLine("Gæt igen");
        }
      }
    }
  }
}

Materiale