コード例 #1
0
        /// <summary>
        /// Run the simulatiuon with a list of player and a sorter with all the cards
        /// </summary>
        /// <param name="players"></param>
        /// <param name="sorter"></param>
        public IEnumerable <Player> Run(IEnumerable <Player> players, IEnumerable <Hand[]> sorter)
        {
            // local function to determine who is the winner of each game
            Player EachGameWinner(Hand[] hands)
            {
                // each player receives a hand
                var game = players.Select((p, i) => { p.Hand = hands[i]; return(p); });

                // evaluate hand rank on individual player by using HandCategoriserChain with Chain of Responsibility Pattern
                game = game.Select(p => { p.Hand = _handEvaluator.Evaluate(p.Hand); return(p); });

                // evaluate the winner
                return(_winnerEvaluator.ShowWinner(game));
            }

            var sorterArray = sorter as Hand[][] ?? sorter.ToArray();

            // sorter gives hands to each game which will return a winner or null when it is tie.
            var winners = sorterArray.Select(EachGameWinner)
                          .Where(w => w != null);

            // winning count on total and individual player
            var totalGameHasWinner = winners.Sum(w =>
            {
                w.WinCount++;
                return(1);
            });

            // total number of tie if it is required
            var tie = sorterArray.Length - totalGameHasWinner;

            return(players);
        }
コード例 #2
0
        public void Should_GetCorrectWinnerBySorting_With_TestWinnerData(string hand1, string hand2, int expectedWinner)
        {
            var player1 = new Player("1")
            {
                Hand = _handEvaluator.Evaluate(hand1.Split(" ").StringToHand())
            };
            var player2 = new Player("2")
            {
                Hand = _handEvaluator.Evaluate(hand2.Split(" ").StringToHand())
            };

            var players = new[] { player1, player2 };

            var winnerPlayer = _winnerEvaluator.ShowWinner(players);

            var winner = winnerPlayer?.Name ?? "0";

            Assert.Equal($"{expectedWinner}", winner);
        }