コード例 #1
0
        public PokerPlayerHandEvaluator(PlayingCardList playerCards, PlayingCardList tableCards)
            : base(null)
        {
            Debug.Assert(playerCards.Count == 2);
            Debug.Assert(tableCards.Count == 5);

            Tuple<HandType, ulong> bestHandValue = HandValue(tableCards);
            PlayingCardList bestHand = tableCards;

            // swap one, or the other player card for any one table card.
            foreach(var card in playerCards) {
                for(int i = 0; i < 5; i++) {
                    var cards = new PlayingCardList();
                    for(int iNewHand = 0; iNewHand < 5; iNewHand++) {
                        if(iNewHand == i) {
                            cards.Add(card);
                        } else {
                            cards.Add(tableCards[iNewHand]);
                        }
                    }
                    var newHand = new PlayingCardList(cards);
                    Tuple<HandType, ulong> newHandValue = HandValue(newHand);
                    if(newHandValue.Item2 > bestHandValue.Item2) {
                        bestHandValue = newHandValue;
                        bestHand = newHand;
                    }
                }
            }
            // swap both for any two table cards.
            for(int iCard1 = 0; iCard1 < 4; iCard1++) {
                for(int iCard2 = iCard1; iCard2 < 5; iCard2++) {
                    var cards = new PlayingCardList();
                    for(int iNewHand = 0; iNewHand < 5; iNewHand++) {
                        if(iNewHand == iCard1) {
                            cards.Add(playerCards[0]);
                        } else if(iNewHand == iCard2) {
                            cards.Add(playerCards[1]);
                        } else {
                            cards.Add(tableCards[iNewHand]);
                        }
                    }
                    var newHand = new PlayingCardList(cards);
                    Tuple<HandType, ulong> newHandValue = HandValue(newHand);
                    if(newHandValue.Item2 > bestHandValue.Item2) {
                        bestHandValue = newHandValue;
                        bestHand = newHand;
                    }
                }
            }

            this.cards = bestHand;
            this.handType = bestHandValue.Item1;
            this.handValue = bestHandValue.Item2;
        }
コード例 #2
0
ファイル: Deck.cs プロジェクト: DarkDevelCoding/HardlyBot
        static PlayingCardList GenerateStandardDeck(bool includeJokers)
        {
            int cardCount = 52 + (includeJokers ? 2 : 0);
            PlayingCardList cards = new PlayingCardList();
            for(int i = 0; i < cardCount; i++) {
                PlayingCard.Suit suit = (PlayingCard.Suit)(i % 4);
                PlayingCard.Value value = (PlayingCard.Value)((i - (int)suit) / 4);
                cards.Add(new PlayingCard(suit, value));
            }

            return cards;
        }