2016-12-31 19 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

簡単な解決策は、別の方法(例えば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

前アプローチは、必ずラベルとgoto文を使用することができ、別の解決策として、私のものよりも優れている。

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

実際それもうまくいくでしょう –

関連する問題