如何计算出一个值出现在数组中的次数c#

时间:2017-04-07 16:45:13

标签: c# arrays dice

我已经设置了一项任务,这意味着我需要创建一个3个或更多的骰子游戏'。我所坚持的是这款游戏所需的得分系统,如下所示: " 玩家反过来掷五个骰子并获得三个或更好的分数。如果玩家只有两种类型,他们可能会重新抛出剩余的骰子以试图改善匹配的骰子值。如果没有滚动匹配的数字,则玩家得分为0.

玩家相应地得分如下:

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;
                            }

                        }

1 个答案:

答案 0 :(得分: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