Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="deck"></param>
        /// <param name="myHand"></param>
        /// <param name="boardHand"></param>
        /// <param name="numOpponents"></param>
        /// <param name="pokerOdds"></param>
        private void ExecuteCalculatePokerOddsForIteration(Deck deck, Hand myHand, Hand boardHand, int numOpponents, PokerOdds pokerOdds)
        {
            var clonedDeck   = deck.Clone();
            var clonedMyHand = myHand.Clone();

            DealRequiredNumberOfCardsToHand(clonedMyHand, clonedDeck, 2);

            var clonedBoardHand = boardHand.Clone();

            DealRequiredNumberOfCardsToHand(clonedBoardHand, clonedDeck, 5);
            clonedMyHand += clonedBoardHand;

            var myHandRank           = _handRankCalculator.CalculateHandRank(clonedMyHand);
            var bestOpponentHand     = SimulateOpponentHandsAndReturnBestHand(clonedDeck, clonedBoardHand, numOpponents);
            var bestOpponentHandRank = bestOpponentHand == null ? null : _handRankCalculator.CalculateHandRank(bestOpponentHand);

            if (myHandRank.IsLessThan(bestOpponentHandRank))
            {
                pokerOdds.NumLosses++;
            }
            else if (myHandRank.IsGreaterThan(bestOpponentHandRank))
            {
                pokerOdds.NumWins++;
            }
            else
            {
                pokerOdds.NumDraws++;
            }

            pokerOdds.PokerHandFrequencies[myHandRank.PokerHand]++;
        }
        public void HandRankCalculator_SpeedTest1()
        {
            //arrange
            var deck = new Deck();
            var handRankSpeedResults = new HandRankCalculatorSpeedTestsDataObject();

            //act
            const int numIterations = 500000;

            for (var i = 0; i < numIterations; i++)
            {
                var randomCards = deck.GetRandomCards(5);
                var hand        = new Hand(randomCards);

                var stopwatch = Stopwatch.StartNew();
                var handRank  = _instance.CalculateHandRank(hand);
                handRankSpeedResults.PokerHandResults[handRank.PokerHand].AddCalculationData(stopwatch.ElapsedTicks);
            }

            Console.WriteLine("Total Times:");
            DisplaySpeedResults(handRankSpeedResults, x => x.TotalCalculationTicks);

            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("Average Times:");
            DisplaySpeedResults(handRankSpeedResults, x => x.AverageCalculationTicks);
        }