2017-04-07 126 views
0

我已经设置了一个赋值,这意味着我需要创建一个'3个或更多的骰子游戏'。我坚持的是这款游戏需要的评分系统,它如下: “ 玩家反过来掷出所有五个骰子,并得分为三类或更好。如果玩家只有如果没有匹配的数字滚动,玩家得分为0.如何计算一个数组中值的出现次数c#

玩家可以相应地得到下面的点数:

3-的一类:3分 4-的一类:6分 5-的一类:12分

轮的一组数被播放(比如说50)和在比赛结束时总得分最高的玩家是胜利者。 “ 我需要找出如何添加了随机骰子的数字,看看哪个号码匹配。

  namespace DiceGame 
      { 
       class Program 
       { 
        static void Main(string[] args) 
        { 

         Console.WriteLine("Hello, I am your computer and I 
    am speaking to you, welcome to the dice game, here are the rules:"); 
         Console.WriteLine("3-of-a-kind: 3 points "); 
         Console.WriteLine("4-of-a-kind: 6 points "); 
         Console.WriteLine("5-of-a-kind: 12 points"); 
         Console.WriteLine("First player to reach 50 wins"); 

         //integer array to store 5 values for the dice 
         int[] Rolls = new int[5]; 


         //Calls from class Dice (calls integer value) 
         for (int numdice = 0; numdice < 5; numdice++) 
         { 
          Rolls[numdice] = Dice.Roll(); 
          //For each loop, get position of array and place 
number we want in that position 
          Console.WriteLine(Rolls[numdice]); 
         } 
         //Makes a new game object which is used to call 
functions 
         Game game = new Game(); 
         game.startGame(); 
         Console.ReadLine(); 
        } 

        //produces one random number 
        public class Dice 
        { 
         static Random rng = new Random(); 
         public static int Roll() 
         { 
          //create a random number generator 
          return rng.Next(1, 7); 
         } 
        } 

        public class Game 
        { 
         public void startGame() 
         { 
          //prompts user to input value and then stores it 
          int playerNo = numberofPlayers(); 
          while (playerNo < 2) 
          { 
           Console.WriteLine("Please enter a number 
between 2-4"); 
           playerNo = numberofPlayers(); 
          } 
          //Now have number of players, need to loop 
through now 

          //creates the number of players in array 
          player[] listofPlayers = new player[playerNo]; 
          //this looks at the current player that the code 
is looking at 
          for (int currentPlayer = 0; currentPlayer < 
playerNo; currentPlayer++) 
          { 
           listofPlayers[currentPlayer] = new player(); 
           Console.WriteLine("It is player {0}'s turn", 
currentPlayer + 1); 


listofPlayers[currentPlayer].rollplayerDice(); 

Console.WriteLine(listofPlayers[currentPlayer].score); 

           listofPlayers[currentPlayer].playersScore(); 

          } 
         } 

         void inputPlayers() 
         { 
          //create number of players code 
          //create a way to input name of players 
          //depending on the number of players, repeat the 
code below that many times 
          string player1 = Console.ReadLine(); 
         } 

         public int numberofPlayers() 
         { 
          int playerNum = 0; 
          try 
          { 
           Console.WriteLine("Please Enter the number 
of players you would like to play with 2-4"); 

           playerNum = int.Parse(Console.ReadLine()); 
          } 
          catch (Exception e) 
          { 
           Console.WriteLine(e.Message); 
          } 
          return playerNum; 

          //if playerNo is equal to 2 = 2 players 
          //if playerNO is equal to 3 = 3 players 
          //if playerNO is equal to 4 = 4 players 
          //if playerNo is less than 2 and more than 4 
then loop back through the if statement and ask to input and number "between 
2-4" 
         } 

         public class player 
         { 
          public int score = 0; 
          int[] playerRoll = new int[5]; 

          public void rollplayerDice() 
          { 

           for (int currentDice = 0; currentDice < 
playerRoll.Length; currentDice++) 
           { 
            playerRoll[currentDice] = Dice.Roll(); 
            Console.WriteLine("Dice {0} rolled a 
{1}", currentDice, playerRoll[currentDice]); 
           } 
          } 

          public int playersScore() 
          { 
           int[] diceFaces = new int[6]; 

           /*for (int diceFace = 0; diceFace < 
playerRoll.Length; diceFace++) 
           { 
             int oneCounter = 0; 


             //number of 1's = 
             //number of 2's = 
             //number of 3's = 
             //number of 4's = 
             //number of 5's = 
             //number of 6's = 
             //create a system to work out the 
score 





             //create a switch to see what the 
player score is equal to (switch 3, 4, 5 and add up the points that 
correlate) 
            } 
            */ 

           foreach (int d in playerRoll) 
           { 
            diceFaces[d]++; 
           } 




           int caseSwitch = 0; 
           switch (caseSwitch) 

           { 
            case 3: 
             //add on the points to a players 
score 
             score += 3; 
             break; 
            case 4: 
             //add on the points to a player 
score 
             break; 

            case 5: 
             //add on the points of a players 
score 
             break; 
           } 
           return 0; 
          } 

         } 

        } 
       } 
      } 

^以上是我的全部代码和下面是我在工作的代码,现在在尝试的。得分

public int playersScore() 
          { 
           int[] diceFaces = new int[6]; 

           /*for (int diceFace = 0; diceFace < 
playerRoll.Length; diceFace++) 
           { 
             int oneCounter = 0; 


             //number of 1's = 
             //number of 2's = 
             //number of 3's = 
             //number of 4's = 
             //number of 5's = 
             //number of 6's = 
             //create a system to work out the 
score 





             //create a switch to see what the 
player score is equal to (switch 3, 4, 5 and add up the points that 
correlate) 
            } 
            */ 

           foreach (int d in playerRoll) 
           { 
            diceFaces[d]++; 
           } 




           int caseSwitch = 0; 
           switch (caseSwitch) 

           { 
            case 3: 
             //add on the points to a players 
score 
             score += 3; 
             break; 
            case 4: 
             //add on the points to a player 
score 
             break; 

            case 5: 
             //add on the points of a players 
score 
             break; 
           } 
           return 0; 
          } 

         } 
+0

你是否熟悉Lambda的..?你可以很容易地做到这一点写一个简单的lambda表达式..做一个谷歌搜索大量的工作示例 – MethodMan

+0

'var numOnes = dice.Where(die => die == 1).Count();' –

+2

您应该提供一个简单的例子,格式化您的代码并删除不需要的评论。 –

回答

0

您可以使用GroupBy(),然后Count()

int score = 0; 
var grouped = dice.GroupBy(x => x); 
//Score 3 of a kinds 
score += grouped.Count(x => x.Count() == 3) * 3; 
//Score 4 of a kinds 
score += grouped.Count(x => x.Count() == 4) * 6; 
//Score 5 of a kinds 
score += grouped.Count(x => x.Count() == 5) * 12; 

工作fiddle

相关问题