2016-12-31 8 views
1

Я работал над этим некоторое время, но теперь я столкнулся с проблемой, когда мне нужно запустить программу, когда пользователь дойдет до конца своих догадок:Возвращаясь к началу программы

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

У меня есть куча классов, и я положу его здесь тоже:

 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"); 
     } 
    } 
+1

простое решение заключается в перемещении кода главного метода отдельного метода (например, StartNewGame()). После того как приложение достигает последняя строка метода (while (input! = "3")) снова вызовите StartNewGame(). – Odrai

+0

Спасибо! Это должно решить, я об этом не думал. Я предлагаю вам положить его в качестве ответа, чтобы я мог отметить его как правильно :) –

+0

Я рад, что смог помочь. – Odrai

ответ

3

Простое решение переместить код метода «Main» в отдельный метод (например, StartNewGame()). После того как приложение достигает последнюю строку методы (в данном случае '! В то время как (вход = "3")' снова вызвать метод StartNewGame()

(Псевдо) код:.

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. 
} 
2

Предыдущих подход уверен, что лучше, чем у меня, как и другое решение, вы можете использовать этикетки и Гото.

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

Действительно, это тоже сработает –