Gerrit ten Napel
Gerrit ten Napel

Reputation: 149

Returning back to the start of the program

I've been working on this a while but now I bumped into a problem where I need to let the program start over when the user reached the end of his/her guesses:

"Speler " + currentPlayer.PlayerName + "heeft geen gisignen meer!"

I have a bunch of classes and I'll put it in here too:

     class GetalSpel
{
    public List<Speler> Spelers { get; set; }
    public int numberToGuess { get; set; }
    public int MaxAantalGissingen { get; set; }
    public int MaxGetal { get; set; }
    public bool Gestopt { get; set; }


    public GetalSpel()
    {
        Spelers = new List<Speler>();

        //name of variable/property = new Classname();
    }

    public GetalSpel(int maxAantalGissingen, int maxGetal)
    {
        Spelers = new List<Speler>();
        this.MaxAantalGissingen = maxAantalGissingen;
        this.MaxGetal = maxGetal;
        Random random = new Random();
        numberToGuess = random.Next(1, MaxGetal + 1);
    }
    public void EnterNewPlayer(string name)
    {
        if (Spelers.Any(item => item.PlayerName == name))
        {
            Console.WriteLine("Speler " + name + " is reeds in gebruik!");
        }
        else
        {
            Speler player = new Speler();
            player.PlayerName = name;
            Spelers.Add(player);
            Console.WriteLine("Speler " + player + " is ingescreven.");
            Console.WriteLine("Druk enter om verder te gaan");
            Console.ReadLine();
        }


    }

    public bool GuessNumber(string name, int number)
    {
        bool guessNumber = false;
        Speler currentPlayer = Spelers.Find(item => item.PlayerName == name);
        if (number == numberToGuess)
        {
            guessNumber = true;
            Console.WriteLine("Proficiat " + currentPlayer.PlayerName + " het getal was" + numberToGuess + "!");
            Gestopt = true;
        }
        else if (currentPlayer.Gissingen == MaxAantalGissingen)
        {
            Console.WriteLine("Speler " + currentPlayer.PlayerName + "heeft geen gisignen meer!");
        }
        else
        {
            currentPlayer.Gissingen = currentPlayer.Gissingen + 1;
        }
        return guessNumber;
    }



}

  class Speler
    {
        public string PlayerName { get; set; }
        public int Gissingen { get; set; }

        public Speler()
        {
            PlayerName = "";
            Gissingen = 0;
        }

        public Speler(string Name)
        { 
            PlayerName = Name;    
            Gissingen = 0;      
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            int maxGetal = 0, maxAantalGissingen = 0;
            string input;
            Console.WriteLine("Raad het getal spel!");
            do
            {
                Console.Write("Geef het maximum getal in waarnaar kan geraden worden: ");
                try
                {
                    maxGetal = int.Parse(Console.ReadLine());
                    if (maxGetal <= 0)
                    {
                        Console.WriteLine("Getal moet positief zijn!");
                    }
                }
                catch (FormatException)
                {
                    Console.WriteLine("Moet een getal zijn!");
                }
            } while (maxGetal <= 0);
            do
            {
                Console.WriteLine("Geef het maximum aantal pogingen in: ");
                try
                {
                    maxAantalGissingen = int.Parse(Console.ReadLine());

                    if (maxAantalGissingen <= 0)
                    {
                        Console.WriteLine("Getal moet positief zijn!");
                    }
                }
                catch (FormatException)
                {
                    Console.WriteLine("Moet een getal zijn!");
                }
            } while (maxAantalGissingen <= 0);


            GetalSpel game = new GetalSpel(maxAantalGissingen, maxGetal);
            Console.Clear();
            do
            {
                Console.WriteLine("1. Schrijf Speler in");
                Console.WriteLine("2. Start Spel");
                Console.WriteLine("3. Stop");
                Console.Write("> ");
                input = Console.ReadLine();

                switch (input)
                {
                    case "1":
                        {
                            try
                            {
                                Speler speler = new Speler();
                                Console.WriteLine("Geeft de naam van de nieuwe speler ");
                                speler.PlayerName = Console.ReadLine();
                                game.Spelers.Add(speler);
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Het naam mocht geen nummers bevatten.");
                                throw;
                            }
                        }
                        break;
                    case "2":
                        do
                        {
                            Console.WriteLine("Nieuwe gissing");
                            Console.WriteLine("Geef de naam van de speler: ");
                            string chosenPlayer = Console.ReadLine();
                            Console.WriteLine("Geef het getal: ");
                            int chosenNumber = int.Parse(Console.ReadLine());
                            try
                            {
                                game.GuessNumber(chosenPlayer, chosenNumber);
                            }
                            catch (NullReferenceException)
                            {
                                Console.WriteLine("Speler " + chosenPlayer + " is niet ingeschreven!");
                            }
                        } while (game.Gestopt == false);
                        Console.WriteLine("Druk op enter om verder te gaan");
                        Console.ReadLine();
                        break;
                    default:
                        break;
                    case "3":
                        {
                            Environment.Exit(0);
                        }
                        break;
                }
            } while (input != "3");
        }
    }

Upvotes: 1

Views: 423

Answers (2)

Max
Max

Reputation: 1090

Previous approach sure is better than mine, as another solution you can use labels and goto.

public static void Main()
{
    start:      
    //Some logic        
    goto start;
}

Upvotes: 2

Odrai
Odrai

Reputation: 2353

A simple solution is to move the code of the 'Main' method to a separate method (e.g. StartNewGame()). Once the application reaches the last line of the method (in this case 'while(input != "3")' call the StartNewGame() method again.

(Pseudo) code:

private static void StartNewGame()
{
      int maxGetal = 0, maxAantalGissingen = 0;
      string input;
      Console.WriteLine("Raad het getal spel!");

      // Do something 

      GetalSpel game = new GetalSpel(maxAantalGissingen, maxGetal);
      Console.Clear();
      do
      {
          // Do something
      } while (input != "3");

      StartNewGame();  // <--- This is the call to solve the described issue.
}

Upvotes: 3

Related Questions