2017-05-02 1 views
0

J'ai un jeu de dés où vous lancez des dés pour marquer des points. Actuellement, une fois que 25 points sont atteints, un message apparaît disant que ce joueur est le gagnant, mais le programme reste bloqué dans une boucle qui va jusqu'à 50. Une fois la limite de score atteinte, je veux terminer le jeu mais je ne suis pas sûr comment faire ça. Je pense que j'ai besoin d'une boucle do-while, mais je ne suis pas sûr de savoir comment ajouter car la limite de points totale est dans une autre classe.Boucle de finition pour les dés?

class Game 
{ 
    private static void Main(string[] args) ----- Main method: 
    { 
     if (gamemode == 1) 
     { 
       quickgame(); 
     } 

} 

    private static void quickgame() ---- Game carried out 
    { 
     Console.WriteLine("\nInstructions: Players take turns rolling all five dice and scoring for three-of-a-kind or better. \n\t  If a player only has two-of-a-kind, they may re-throw the remaining dice in an \n\t  attempt to improve the matching dice values. If no matching numbers are\n\t  rolled, a player scores 0. The first player to reach 25 points wins. "); 
     Console.WriteLine("\nScoring: 3-Of-A-Kind = 3 Points \n   4-Of-A-Kind = 6 Points \n   5-Of-A-Kind = 12 Points\n"); 

     Random RandomNum = new Random(); 
     Player[] player1 = new Player[5]; 
     Die[] myDie = new Die[5]; 


     for (int i = 0; i < 5; i++) 
     { 
      myDie[i] = new Dice_v4.Die(RandomNum); 
      player1[i] = new Dice_v4.Player(); 
     } 

     for (int i = 0; i < 2; i++) // Number of players 
     { 
      Console.Write("Enter Name for Player {0}:", i + 1); 
      string NewName = Console.ReadLine(); 
      player1[i].SetName(NewName); 
     } 

     Console.WriteLine("\nPress enter in turns to roll the five dice"); 
     Console.ReadLine(); 
     Console.WriteLine(); 


     for (int j = 1; j < 50; j++) 
     { 
      for (int i = 0; i < 2; i++) 
      { 

       myDie[i].roll(); 
       Console.WriteLine("{0} Rolled:{1} on the first dice", player1[i].GetName(), myDie[i].GetTopNumber()); 
       Console.WriteLine("{0} Rolled:{1} on the second dice", player1[i].GetName(), myDie[i].GetTopNumber1()); 
       Console.WriteLine("{0} Rolled:{1} on the third dice", player1[i].GetName(), myDie[i].GetTopNumber2()); 
       Console.WriteLine("{0} Rolled:{1} on the fourth dice", player1[i].GetName(), myDie[i].GetTopNumber3()); 
       Console.WriteLine("{0} Rolled:{1} on the fifth dice", player1[i].GetName(), myDie[i].GetTopNumber4()); 
       myDie[i].points();      
       Console.WriteLine("\t\t\t\t\tTotal Throws:{0}\n ------------------------------------------------------", j); 
       myDie[i].Totally(); 
       Console.ReadLine(); 

      } 
     } 

    } 

    } 

Points:

class Die 
{ 


    private int NumberTop1;     //attributes 
    private int NumberTop2; 
    private int NumberTop3; 
    private int NumberTop4; 
    private int NumberTop5; 

    int threepoints = 0; 
    int sixpoints = 0; 
    int twelvepoints = 0; 
    int TotalPoints = 0; 

    private Random RandomNumGenerator; 

    public Die(Random RandomGenerator)  // constructor 
    { 
     RandomNumGenerator = RandomGenerator;  // initialises random number 
    } 

    public int GetTopNumber() 
    { 
     return NumberTop1;   // Returns number on top 
    } 

    public int GetTopNumber1() 
    { 
     return NumberTop2; 
    } 

    public int GetTopNumber2() 
    { 
     return NumberTop3; 
    } 

    public int GetTopNumber3() 
    { 
     return NumberTop4; 
    } 

    public int GetTopNumber4() 
    { 
     return NumberTop5; 
    } 

    public void roll() 
    { 
     NumberTop1 = RandomNumGenerator.Next(1, 7); 
     NumberTop2 = RandomNumGenerator.Next(1, 7); 
     NumberTop3 = RandomNumGenerator.Next(1, 7); 
     NumberTop4 = RandomNumGenerator.Next(1, 7); 
     NumberTop5 = RandomNumGenerator.Next(1, 7); 

     List<int> diceValues = new List<int>(); 
     diceValues.Add(GetTopNumber()); 
     diceValues.Add(GetTopNumber1()); 
     diceValues.Add(GetTopNumber2()); 
     diceValues.Add(GetTopNumber3()); 
     diceValues.Add(GetTopNumber4()); 


     var duplicates = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 3) 
     .Select(g => g.Key); 
     foreach (var d in duplicates) 
     { 
      Console.BackgroundColor = ConsoleColor.Red; 
      Console.WriteLine("\n{0} Appeared three times --- 3 Points Awarded\n", d); 
      Console.BackgroundColor = ConsoleColor.Black; threepoints += 3; 
     } 

     var fourting = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 4) 
     .Select(g => g.Key); 
     foreach (var e in fourting) 
     { 
      Console.WriteLine("\n{0} Appeared four times --- 6 Points Awarded\n", e); 
      sixpoints += 6; 
     } 

     var fiveting = diceValues 
     .GroupBy(i => i) 
     .Where(g => g.Count() == 5) 
     .Select(g => g.Key); 
     foreach (var f in fiveting) 
     { 
      Console.WriteLine("\n{0} Appeared five times --- 12 Points Awarded\n", f); 
      twelvepoints += 12; 
     } 
    } 
public string points() 
    { 
     TotalPoints = threepoints + sixpoints + twelvepoints; 
     Console.WriteLine("\n\t\t\t\t\tTotal Score: {0}", TotalPoints); 

     return pointss; 
    } 



    public string Totally() 
    { 
     if (TotalPoints >= 25) 
     { 
      Console.WriteLine("This Player Won the game"); 

     } 
     return tots; 
    } 
} 
+0

Comment résumez-vous les valeurs de 'TotalPoints' dans la classe Dice? –

+0

rien que je comprends. Je jouais juste en essayant de le faire fonctionner – Russsu

+0

Si vous n'êtes pas clair sur la logique, il est très difficile de répondre à la question. Même si nous répondons à la question et si vous n'arrivez pas à comprendre la logique, il n'y a pas de raison. Pouvez-vous partager la classe de dés entière? –

Répondre

0

Votre première nécessité de changer de méthode Totally() de classe dés à une propriété comme suit.

public class Dice 
{ 
    public int TotalScore 
    { 
     get { return TotalPoints; } 
    } 
} 

Je ne sais pas pourquoi vous devez effectuer une boucle 50 fois.

Vous pouvez utiliser la logique suivante. Quelle est la valeur que vous définissez à la variable `tots` avant de retourner de` Totally` dans la classe Dice?

private static void quickgame() ---- Game carried out 
{ 
    // All other code.... 

    bool anyPlayerWon = false; 
    int totalThrows = 0; 
    while(!anyPlayerWon) 
    { 
     totalThrows += 1; 
     for (int i = 0; i < 2; i++) 
     { 
      myDie[i].roll(); 
      Console.WriteLine("{0} Rolled:{1} on the first dice", 
       player1[i].GetName(), myDie[i].GetTopNumber()); 
      Console.WriteLine("{0} Rolled:{1} on the second dice", 
       player1[i].GetName(), myDie[i].GetTopNumber1()); 
      Console.WriteLine("{0} Rolled:{1} on the third dice", 
       player1[i].GetName(), myDie[i].GetTopNumber2()); 
      Console.WriteLine("{0} Rolled:{1} on the fourth dice", 
       player1[i].GetName(), myDie[i].GetTopNumber3()); 
      Console.WriteLine("{0} Rolled:{1} on the fifth dice", 
       player1[i].GetName(), myDie[i].GetTopNumber4()); 
      myDie[i].points();      
      Console.WriteLine("\t\t\t\t\tTotal Throws:{0}\n ---------------- --------------------------------------", totalThrows); 
      var totalScore = myDie[i].TotalScore; 
      if(totalScore >= 25) 
      { 
       anyPlayerWon = true; 
       Console.WriteLine("This Player Won the game"); 
       break; 
      } 
     } 
    } 
} 
+0

Merci beaucoup !!! Ça marche. Le total des lancers ne fonctionne plus? – Russsu

+0

Mise à jour de la réponse pour afficher totalThrows ... –