public Odds CalculateOdds(PokerHand SharedCards)
        {
            List <HoldemHand> PossibleHandsOfOpponent = new List <HoldemHand>();
            PokerHand         BestPokerHand           = new PokerHand();

            PokerHand[] BestPokerHandArray = new PokerHand[990];
            int         NumWins = 0, NumDraws = 0, NumLoses = 0;
            double      ChancesOfWinning = 0.0, ChancesOfLosing = 0.0, ChancesOfDrawing = 0.0;
            int         ResultOfComparison;

            for (int i = 0; i < 990; ++i)
            {
                BestPokerHandArray[i] = new PokerHand();
            }

            Deck.Remove(SharedCards.Hand[0]);
            Deck.Remove(SharedCards.Hand[1]);
            Deck.Remove(SharedCards.Hand[2]);
            Deck.Remove(SharedCards.Hand[3]);
            Deck.Remove(SharedCards.Hand[4]);

            Deck.Remove(Hand[0]);
            Deck.Remove(Hand[1]);

            for (int i = 0; i < 45; ++i)
            {
                for (int j = i + 1; j < 45; ++j)
                {
                    HoldemHand TmpHoldemHand = new HoldemHand();
                    TmpHoldemHand.Hand[0] = Deck.ElementAt(i);
                    TmpHoldemHand.Hand[1] = Deck.ElementAt(j);
                    PossibleHandsOfOpponent.Insert(0, TmpHoldemHand);
                }
            }

            BestPokerHand = FindBestPokerHand(SharedCards);

            for (int i = 0; i < 990; ++i)
            {
                BestPokerHandArray[i] = PossibleHandsOfOpponent.ElementAt(i).FindBestPokerHand(SharedCards);
            }

            for (int i = 0; i < 990; ++i)
            {
                ResultOfComparison = BestPokerHand.CompareTo(BestPokerHandArray[i]);

                if (ResultOfComparison == 1)
                {
                    ++NumWins;
                }

                else if (ResultOfComparison == -1)
                {
                    ++NumLoses;
                }

                else
                {
                    ++NumDraws;
                }
            }

            Deck.Insert(0, SharedCards.Hand[0]);
            Deck.Insert(0, SharedCards.Hand[1]);
            Deck.Insert(0, SharedCards.Hand[2]);
            Deck.Insert(0, SharedCards.Hand[3]);
            Deck.Insert(0, SharedCards.Hand[4]);

            Deck.Insert(0, Hand[0]);
            Deck.Insert(0, Hand[1]);

            ChancesOfWinning = (NumWins / 990.0) * 100.0;
            ChancesOfLosing  = (NumLoses / 990.0) * 100.0;
            ChancesOfDrawing = (NumDraws / 990.0) * 100.0;

            return(new Odds(ChancesOfWinning, ChancesOfLosing, ChancesOfDrawing));
        }
        public PokerHand FindBestPokerHand(PokerHand SharedCards)
        {
            PokerHand[] PokerHandArray = new PokerHand[21];

            for (int k = 0; k < 21; ++k)
            {
                PokerHandArray[k] = new PokerHand();
            }

            PokerHandArray[0].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[0].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[0].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[0].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[0].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[0].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[0].Hand[3].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[0].Hand[3].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[0].Hand[4].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[0].Hand[4].CardSuit = SharedCards.Hand[2].CardSuit;

            PokerHandArray[1].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[1].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[1].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[1].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[1].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[1].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[1].Hand[3].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[1].Hand[3].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[1].Hand[4].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[1].Hand[4].CardSuit = SharedCards.Hand[3].CardSuit;

            PokerHandArray[2].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[2].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[2].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[2].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[2].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[2].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[2].Hand[3].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[2].Hand[3].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[2].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[2].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[3].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[3].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[3].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[3].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[3].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[3].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[3].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[3].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[3].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[3].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[4].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[4].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[4].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[4].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[4].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[4].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[4].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[4].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[4].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[4].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[5].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[5].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[5].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[5].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[5].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[5].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[5].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[5].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[5].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[5].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[6].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[6].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[6].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[6].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[6].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[6].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[6].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[6].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[6].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[6].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[7].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[7].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[7].Hand[1].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[7].Hand[1].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[7].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[7].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[7].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[7].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[7].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[7].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[8].Hand[0].CardRank = Hand[1].CardRank;
            PokerHandArray[8].Hand[0].CardSuit = Hand[1].CardSuit;
            PokerHandArray[8].Hand[1].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[8].Hand[1].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[8].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[8].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[8].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[8].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[8].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[8].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[9].Hand[0].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[9].Hand[0].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[9].Hand[1].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[9].Hand[1].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[9].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[9].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[9].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[9].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[9].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[9].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[10].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[10].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[10].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[10].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[10].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[10].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[10].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[10].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[10].Hand[4].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[10].Hand[4].CardSuit = SharedCards.Hand[3].CardSuit;

            PokerHandArray[11].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[11].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[11].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[11].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[11].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[11].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[11].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[11].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[11].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[11].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[12].Hand[0].CardRank = Hand[1].CardRank;
            PokerHandArray[12].Hand[0].CardSuit = Hand[1].CardSuit;
            PokerHandArray[12].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[12].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[12].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[12].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[12].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[12].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[12].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[12].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[13].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[13].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[13].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[13].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[13].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[13].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[13].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[13].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[13].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[13].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[14].Hand[0].CardRank = Hand[1].CardRank;
            PokerHandArray[14].Hand[0].CardSuit = Hand[1].CardSuit;
            PokerHandArray[14].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[14].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[14].Hand[2].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[14].Hand[2].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[14].Hand[3].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[14].Hand[3].CardSuit = SharedCards.Hand[3].CardSuit;
            PokerHandArray[14].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[14].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[15].Hand[0].CardRank = Hand[1].CardRank;
            PokerHandArray[15].Hand[0].CardSuit = Hand[1].CardSuit;
            PokerHandArray[15].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[15].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[15].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[15].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[15].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[15].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[15].Hand[4].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[15].Hand[4].CardSuit = SharedCards.Hand[3].CardSuit;

            PokerHandArray[16].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[16].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[16].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[16].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[16].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[16].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[16].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[16].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[16].Hand[4].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[16].Hand[4].CardSuit = SharedCards.Hand[3].CardSuit;

            PokerHandArray[17].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[17].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[17].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[17].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[17].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[17].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[17].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[17].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[17].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[17].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[18].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[18].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[18].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[18].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[18].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[18].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[18].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[18].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[18].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[18].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            PokerHandArray[19].Hand[0].CardRank = Hand[0].CardRank;
            PokerHandArray[19].Hand[0].CardSuit = Hand[0].CardSuit;
            PokerHandArray[19].Hand[1].CardRank = Hand[1].CardRank;
            PokerHandArray[19].Hand[1].CardSuit = Hand[1].CardSuit;
            PokerHandArray[19].Hand[2].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[19].Hand[2].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[19].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[19].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[19].Hand[4].CardRank = SharedCards.Hand[3].CardRank;
            PokerHandArray[19].Hand[4].CardSuit = SharedCards.Hand[3].CardSuit;

            PokerHandArray[20].Hand[0].CardRank = Hand[1].CardRank;
            PokerHandArray[20].Hand[0].CardSuit = Hand[1].CardSuit;
            PokerHandArray[20].Hand[1].CardRank = SharedCards.Hand[0].CardRank;
            PokerHandArray[20].Hand[1].CardSuit = SharedCards.Hand[0].CardSuit;
            PokerHandArray[20].Hand[2].CardRank = SharedCards.Hand[1].CardRank;
            PokerHandArray[20].Hand[2].CardSuit = SharedCards.Hand[1].CardSuit;
            PokerHandArray[20].Hand[3].CardRank = SharedCards.Hand[2].CardRank;
            PokerHandArray[20].Hand[3].CardSuit = SharedCards.Hand[2].CardSuit;
            PokerHandArray[20].Hand[4].CardRank = SharedCards.Hand[4].CardRank;
            PokerHandArray[20].Hand[4].CardSuit = SharedCards.Hand[4].CardSuit;

            int  ReturnValue, i = 0, j = 1;
            bool BestHandIsFound = false;

            while (!BestHandIsFound)
            {
                ReturnValue = PokerHandArray[i].CompareTo(PokerHandArray[j]);

                if (ReturnValue == -1)
                {
                    j = 0;
                    ++i;
                    continue;
                }

                else if (ReturnValue > -1 && j == 20)
                {
                    BestHandIsFound = true;
                }

                else
                {
                    ++j;
                }
            }

            return(PokerHandArray[i]);
        }