2017-07-20 2 views
-1

Je fais un jeu de patate chaude en C#. Dans le code j'essayais de gérer une exception dans la méthode Game() où il vous inviterait à passer la patate à quelqu'un (par son numéro de joueur) cela vous empêcherait d'entrer votre propre numéro de joueur (en essayant de le passer .) la seule chose est, je vais avoir du mal à essayer de gérer l'exception:Je ne sais pas comment gérer l'exception dans le jeu de patates chaudes C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace HotPotatoe 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      Console.Clear(); 
      Console.Write("How many players are there? (up to 4): "); 
      string PlayerCount = Console.ReadLine(); 
      string PlayerOne = null; 
      string PlayerTwo = null; 
      string PlayerThree = null; 
      string PlayerFour = null; 
      if (PlayerCount == "2") 
      { 
       Console.Write("Enter player 1's name: "); 
       PlayerOne = Console.ReadLine(); 
       Console.Write("Enter player 2's name: "); 
       PlayerTwo = Console.ReadLine(); 
       Random ran = new Random(); 
       int WhoStarts = ran.Next(1, 2); 
       Game(PlayerOne, PlayerTwo, PlayerThree, PlayerFour, WhoStarts); 
      } 
      else if (PlayerCount == "3") 
      { 
       Console.Write("Enter player 1's name: "); 
       PlayerOne = Console.ReadLine(); 
       Console.Write("Enter player 2's name: "); 
       PlayerTwo = Console.ReadLine(); 
       Console.Write("Enter player 3's name: "); 
       PlayerThree = Console.ReadLine(); 
       Random ran = new Random(); 
       int WhoStarts = ran.Next(1, 3); 
       Game(PlayerOne, PlayerTwo, PlayerThree, PlayerFour, WhoStarts); 
      } 
      else if (PlayerCount == "4") 
      { 
       Console.Write("Enter player 1's name: "); 
       PlayerOne = Console.ReadLine(); 
       Console.Write("Enter player 2's name: "); 
       PlayerTwo = Console.ReadLine(); 
       Console.Write("Enter player 3's name: "); 
       PlayerThree = Console.ReadLine(); 
       Console.Write("Enter player 4's name: "); 
       PlayerFour = Console.ReadLine(); 
       Random ran = new Random(); 
       int WhoStarts = ran.Next(1, 4); 

       Game(PlayerOne, 
        PlayerTwo, 
        PlayerThree, 
        PlayerFour, 
        WhoStarts); 
      } 
      else 
      { 
       Console.WriteLine("Not valid!"); 
       Console.ReadKey(); 
       Main(); 
      } 
     } 

     private static void Game 
      (string player1, 
      string player2, 
      string player3, 
      string player4, 
      int whoStarts)  
     { 
      Player Player1 = new Player(); 
      Player Player2 = new Player(); 
      Player Player3 = new Player(); 
      Player Player4 = new Player(); 
      Player1.Name = player1;   
      Player2.Name = player2; 
      Player3.Name = player3; 
      Player4.Name = player4; 
      Player1.Number = 1; 
      Player2.Number = 2; 
      Player3.Number = 3; 
      Player4.Number = 4; 
      Player1.IsOut = false; 
      Player2.IsOut = false; 
      if(Player3.Name == null) 
      { 
       Player3.IsOut = true; 
      } 
      else 
      { 
       Player3.IsOut = false; 
      } 
      if (Player4.Name == null) 
      { 
       Player4.IsOut = true; 
      } 
      else 
      { 
       Player3.IsOut = false; 
      } 
      switch (whoStarts) 
      { 
       case 1: 
        Player1.HasPotatoe = true; 
        break; 
       case 2: 
        Player2.HasPotatoe = true; 
        break; 
       case 3: 
        Player3.HasPotatoe = true; 
        break; 
       default:  
        Player4.HasPotatoe = true; 
        break; 
      } 
      List<Player> PlayingList = new List<Player> 
      { 
       Player1, 
       Player2 
      }; 
      if (Player3.IsOut == false) 
      { 
       PlayingList.Add(Player3); 
      } 
      if (Player4.IsOut == false) 
      { 
       PlayingList.Add(Player4); 
      } 
      Random rand = new Random(); 
      int NumOfRounds = rand.Next(1, 10); 
      do 
      { 
       foreach (Player p in PlayingList) 
       { 
        if (p.HasPotatoe == true) 
        { 
         Console.Write("Player {0} has the potatoe! Who do you want to pass it to? (by number): ", p.Number); 
         string input = Console.ReadLine(); 
         if (input == "1") 
         { 
          PlayingList[0].HasPotatoe = true; 
          NumOfRounds--; 
         } 
         else if (input == "2") 
         { 
          PlayingList[1].HasPotatoe = true; 
          NumOfRounds--; 
         } 
         else if (input == "3") 
         { 
          if (Player3.IsOut == true) 
          { 
           Console.WriteLine("That person isn't playing! Choose another player!"); 
           Console.ReadKey(); 
          } 
          else 
          { 
           PlayingList[2].HasPotatoe = true; 
           NumOfRounds--; 
          } 
         } 
         else if (input == "4") 
         { 
          if (Player4.IsOut == true) 
          { 
           Console.WriteLine("That person isn't playing! Choose another player!"); 
           Console.ReadKey(); 
          } 
          else 
          { 
           PlayingList[3].HasPotatoe = true; 
           NumOfRounds--; 
          } 
         } 
         else if(input == p.Number.ToString()) // this is the part i'm having trouble with................................ 
         { 
          Console.WriteLine("{0}", p.Number.ToString()); 
          Console.WriteLine("You can't pass it to yourself! -_- Choose someone else..." + p.Number.ToString()); 
          Console.ReadKey(); 
         } 
        } 
       } 
      } while (NumOfRounds != 0); 
      if(Player1.HasPotatoe == true) 
      { 
       Console.WriteLine("{0} is out! Play again!", Player1.Name); 
       Console.ReadKey(); 
       Main(); 
      } 
      else if(Player2.HasPotatoe == true) 
      { 
       Console.WriteLine("{0} is out! Play again!", Player2.Name); 
       Console.ReadKey(); 
       Main(); 
      } 
      else if (Player3.HasPotatoe == true) 
      { 
       Console.WriteLine("{0} is out! Play again!", Player3.Name); 
       Console.ReadKey(); 
       Main(); 
      } 
      else if (Player4.HasPotatoe == true) 
      { 
       Console.WriteLine("{0} is out! Play again!", Player4.Name); 
       Console.ReadKey(); 
       Main(); 
      } 
     } 
    }   

    class Player 
    { 
     public string Name { get; set; } 
     public int Number { get; set; } 
     public bool HasPotatoe { get; set; } 
     public bool IsOut { get; set; } 
    } 
} 

la partie spécifique où l'erreur est:

Random rand = new Random(); 
      int NumOfRounds = rand.Next(1, 10); 
      do 
      { 
       foreach (Player p in PlayingList) 
       { 
        if (p.HasPotatoe == true) 
        { 
         Console.Write("Player {0} has the potatoe! Who do you want to pass it to? (by number): ", p.Number); 
         string input = Console.ReadLine(); 
         if (input == "1") 
         { 
          PlayingList[0].HasPotatoe = true; 
          NumOfRounds--; 
         } 
         else if (input == "2") 
         { 
          PlayingList[1].HasPotatoe = true; 
          NumOfRounds--; 
         } 
         else if (input == "3") 
         { 
          if (Player3.IsOut == true) 
          { 
           Console.WriteLine("That person isn't playing! Choose another player!"); 
           Console.ReadKey(); 
          } 
          else 
          { 
           PlayingList[2].HasPotatoe = true; 
           NumOfRounds--; 
          } 
         } 
         else if (input == "4") 
         { 
          if (Player4.IsOut == true) 
          { 
           Console.WriteLine("That person isn't playing! Choose another player!"); 
           Console.ReadKey(); 
          } 
          else 
          { 
           PlayingList[3].HasPotatoe = true; 
           NumOfRounds--; 
          } 
         } 
         else if(input == p.Number.ToString()) // this is where the problem is... 
         { 
          Console.WriteLine("{0}", p.Number.ToString()); 
          Console.WriteLine("You can't pass it to yourself! -_- Choose someone else..." + p.Number.ToString()); 
          Console.ReadKey(); 
         } 
        } 
       } 
      } while (NumOfRounds != 0); 

donc en gros je dis: si (entrée = = p.Numéro(). ToString()) // p.Numéro() == Numéro du joueur
puis lancez l'exception. Mais je ne suis pas sûr de savoir comment s'y prendre. J'ai essayé de convertir l'entier en chaîne avec la méthode .ToString(). mais ça ne semble rien changer. J'ai également essayé de transformer l'entrée en un entier de 32 bits avec la méthode Int32.Parse (entrée), mais toujours pas de chance. Le résultat fait juste quelque chose de aléatoire. Par exemple, si j'étais le joueur deux, et que je vous invite à passer la patate au joueur deux, alors il écrira juste à la console que le joueur 2 a la patate encore et encore. Je ne suis pas sûr de savoir comment le faire correctement. Aucune suggestion?

+0

ce n'est pas clair ce que vous demandez. Demandez-vous comment lancer une exception. (Un vrai C# execption) ou comment gérer cette exception. Pourquoi essayez-vous d'analyser int dans le cadre de cette – pm100

+0

Note: vous utilisez beaucoup de code dupliqué ici et les variables fixes pour les joueurs, etc. Pensez un peu et simplifier l'utilisation d'une manière généralisée. Si "2" signifie un index de 1 et "3" un index de 2, je suis sûr que vous pouvez facilement généraliser cela. En plus d'imprimer le nombre de joueurs, etc. en fonction du nombre de joueurs. –

+0

Il y a trop de code ici. Vous devez fournir un bon [mcve]. Oui, il doit être ** complet **. Mais il doit aussi être ** minime **. Comme dans, contenant du code _no_ qui n'est pas strictement nécessaire pour démontrer le problème _specific_ que vous posez. Nous n'avons pas besoin ou ne voulons pas voir tout le code dans votre programme. ... –

Répondre

0

Lancer une exception est simple. Peut-être que votre problème est la création de vos propres exceptions pour les récupérer plus tard. Ne

public class BadPlayerException: Exception 
    { 
    } 

... 

throw new BadPlayerEcxeption(): 
+0

Comment ajouter un message d'erreur à la console? Faire savoir à l'utilisateur qu'il essaie de se passer la patate? –

+0

@AaronT. Vous n'utiliserez pas d'exception pour cela. Quel est le problème avec simplement sortir un message pour dire que vous ne pouvez pas passer à vous-même, puis répéter la boucle? – john

+0

@AaronT. Pour clarifier: les exceptions doivent être utilisées lorsqu'une méthode ne peut pas connaître la manière correcte de gérer un ensemble de données, ou lorsque les données fournies provoquent une exception ou un comportement incorrect plus tard. Dans votre cas, vous avez toutes les informations dont vous avez besoin pour gérer le problème dans la méthode. Si vous voulez vraiment terminer le jeu, appelez 'return' après avoir envoyé le message que vous ne pouvez pas vous transmettre. – john