2017-05-01 1 views
0

Je travaille sur un jeu de dés où je remets des dés dans l'espoir de trouver un 3 d'un genre ou un 4, etc. sur 6 dés. Mais si vous obtenez une paire de deux, je voulais garder ces valeurs et relancer pour trouver un 3,4,5 d'un genre. J'ai du mal à comprendre comment faire en sorte que le programme conserve les valeurs tout en relançant les autres sans complètement relancer tout.Comment puis-je maintenir des numéros après avoir lancé des dés pour pouvoir relancer les dés mais pas tous? C# (mal exprimé désolé)

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

class die 
{ 

    // attributes 

    private int numberOnTop; 
    private Random randomNumberGenerator; 

    // methods 
    // roll the die, get the number currently showing on top 

    public die(Random randomGenerator) 
    { 
     //initialise the random number generator 
     randomNumberGenerator = randomGenerator; 
    } 

    public void roll() 
    { 
     //create a random number from 1 to 6 and store it in the numberOnTop attribute 

     numberOnTop = randomNumberGenerator.Next(1, 7); 
    } 


    public int getNumberOnTop() 
    { 
     // a "get" method to get the value of the number currently on top and return the value to where the call was made 

     return numberOnTop; 
    } 

} 


class diceGame 
{ 
    //main program 


    public static void Main(String[] args) 
    { 
     Int32 UserSelect; 
     int playerone = 0; 
     int playertwo = 0; 
     int playeroneturn = 0; 

     Console.WriteLine("Welcome to my two person dice game. Would you like to play \r\n 1. Person vs Person \r\n 2. Person vs AI"); 
     UserSelect = Convert.ToInt32(Console.ReadLine()); 

     // A switch will select which option that the user input using the Value Selected variable 
      switch (UserSelect) 
      { 
       case 1: 

       do 
       { 
        Console.WriteLine("This is players 1's turn"); 

        //create a random number generator to pass to the die objects 
        Random myRandomiser = new Random(); 


        die[] myDie = new die[6]; 
        //instantiate the three dice (the constructor is called) 

        for (int i = 0; i < 6; i++) 
        { 

         myDie[i] = new die(myRandomiser); 

        } 

        for (int i = 0; i < 6; i++) 
        { 
         myDie[i].roll(); 

         switch (myDie[i].getNumberOnTop()) 
         { 
          case 1: 
           Console.WriteLine(" ---------\r\n |   |\r\n | O |\r\n |   |\r\n ---------"); 
           break; 

          case 2: 
           Console.WriteLine(" ---------\r\n | O  |\r\n |   |\r\n |  O |\r\n ---------"); 
           break; 
          case 3: 
           Console.WriteLine(" ---------\r\n | O  |\r\n | O |\r\n |  O |\r\n ---------"); 
           break; 
          case 4: 
           Console.WriteLine(" ---------\r\n | O  O |\r\n |   |\r\n | O  O |\r\n ---------"); 
           break; 
          case 5: 
           Console.WriteLine(" ---------\r\n | O  O |\r\n | O |\r\n | O  O |\r\n ---------"); 
           break; 

          case 6: 
           Console.WriteLine(" ---------\r\n | O  O |\r\n | O  O |\r\n | O  O |\r\n ---------"); 
           break; 
         } 
        } 

        // two of a kind check goes here and therefore the rerolls will happen here 

        var twoofakind = new[] { myDie[0].getNumberOnTop(), myDie[1].getNumberOnTop(), myDie[2].getNumberOnTop(), myDie[3].getNumberOnTop(), myDie[4].getNumberOnTop(), myDie[5].getNumberOnTop() }; 

        var isLargeGroupTwo = twoofakind.GroupBy(n => n, (key, group) => group.Count()) 
        .Any(count => count >= 2); 

        if (isLargeGroupTwo == true) { 
         Console.WriteLine("Please reroll to try and get a 3, 4, or 5 of a kind"); 
         if (myDie[0].getNumberOnTop() == myDie[1].getNumberOnTop()) 
         { 
          int i = 2; 
          myDie[i].roll(); 

         } 
        } 

        // ends here 


        var threeofakind = new[] { myDie[0].getNumberOnTop(), myDie[1].getNumberOnTop(), myDie[2].getNumberOnTop(), myDie[3].getNumberOnTop(), myDie[4].getNumberOnTop(), myDie[5].getNumberOnTop() }; 

        //three of a kind check 

        var isLargeGroupThree = threeofakind.GroupBy(n => n, (key, group) => group.Count()) 
        .Any(count => count >= 3); 
        Console.WriteLine("Is there any 3 of a kind's in the roll?"); 
        Console.WriteLine(isLargeGroupThree); 

        if (isLargeGroupThree == true) 
        { 
         playerone = playerone + 3; 
         Console.WriteLine("Player one has scored a 3 of a kind therefore earning 3 points."); 
         Console.WriteLine(playerone); 

        } 
        else if (isLargeGroupThree == false) 
        { 
         var fourofakind = new[] { myDie[0].getNumberOnTop(), myDie[1].getNumberOnTop(), myDie[2].getNumberOnTop(), myDie[3].getNumberOnTop(), myDie[4].getNumberOnTop(), myDie[5].getNumberOnTop() }; 
         //four of a kind check 
         var isLargeGroupFour = fourofakind.GroupBy(n => n, (key, group) => group.Count()) 
         .Any(count => count >= 4); 
         Console.WriteLine("Is there any 4 of a kind's in the roll?"); 
         Console.WriteLine(isLargeGroupFour); 
         if (isLargeGroupFour == true) 
         { 
          playerone = playerone + 6; 
          Console.WriteLine("Player one has scored a 4 of a kind therefore earning 6 points."); 
          Console.WriteLine("Player one's total score is" + playerone); 

         } 
         else if (isLargeGroupFour == false) 
         { 
          var fiveofakind = new[] { myDie[0].getNumberOnTop(), myDie[1].getNumberOnTop(), myDie[2].getNumberOnTop(), myDie[3].getNumberOnTop(), myDie[4].getNumberOnTop(), myDie[5].getNumberOnTop() }; 
          //four of a kind check 
          var isLargeGroupFive = fiveofakind.GroupBy(n => n, (key, group) => group.Count()) 
          .Any(count => count >= 5); 
          Console.WriteLine("Is there any 5 of a kind's in the roll?"); 
          Console.WriteLine(isLargeGroupFive); 
          if (isLargeGroupFive == true) 
          { 
           playerone = playerone + 12; 
           Console.WriteLine("Player one has scored a 5 of a kind therefore earning 12 points."); 
           Console.WriteLine("Player two's total score is" + playerone); 

          } 
         } 
        } 

        Console.ReadLine(); 
       } while (playerone < 50); 

       Console.WriteLine("Player one has reached 50 points in " + playeroneturn + "turns"); 
       break; 
      } 
     } 
    } 

Je vais continuer à y travailler, mais toute aide ce sera vraiment génial :)

+0

Commencez à placer le code en dehors de la boucle de création. Par exemple: Random myRandomiser = new Random(); –

Répondre

0

l'intérieur de votre deux d'un chèque de genre:

if (isLargeGroupTwo == true) { 
        Console.WriteLine("Please reroll to try and get a 3, 4, or 5 of a kind"); 
        if (myDie[0].getNumberOnTop() == myDie[1].getNumberOnTop()) 
        { 
         for(int i = 2; i < 6; i++) 
          myDie[i].roll(); 

Cela pourrait fonctionner.