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

How to work out how many times a value appears in an array c#

我被安排了一项任务,这意味着我需要创建一个“3 个或更多骰子游戏”。我坚持的是这个游戏需要的计分系统,它是这样的: “ 玩家依次掷出所有五个骰子并得分为三分球或更好。如果玩家只有两种,他们可能会重新掷出剩余的骰子,以尝试提高匹配的骰子值。如果没有匹配的数字被掷出,玩家得 0 分。

玩家相应得分如下:

3 分:3 分 4-of-a-kind:6分 5-of-a-kind: 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;
}

您可以使用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