void getRank() { if(isRoyalFlush()) { rank = RoyalFlush; } else if(isStraightFlush()) { rank = StraightFlush; } else if(fourKindPair()) { rank = FourOfaKind; } else if(isFullHouse()) { rank = FullHouse; } else if(sameSuit()) { rank = Flush; } else if(consecutive()) { rank = Straight; } else if(threeKindPair()) { rank = ThreeOfaKind; } else if(twoKindTwoPairs()) { rank = TwoPairs; } else if(twoKindOnePair()) { rank = OnePair; } else { rank = HighCard; } }
// TODO // Hand* Util::determineHandType(std::vector<Card*>& p_cards) { determineDuplicateCards(p_cards); Hand * newHand = nullptr; uint handType = HIGHEST_CARD; if (isRoyalFlush(p_cards)) { newHand = new NonRepeatedHand(ROYAL_FLUSH, p_cards); } else if (isStraightFlush(p_cards)) { newHand = new NonRepeatedHand(STRAIGHT_FLUSH, p_cards); } else if (isFourOfAKind()) { newHand = new RepeatedHand(FOUR_OF_A_KIND, p_cards, m_occurences, m_occurencesVector); } else if (isFullHouse()) { newHand = new RepeatedHand(FULL_HOUSE, p_cards, m_occurences, m_occurencesVector); } else if (isFlush(p_cards)) { newHand = new NonRepeatedHand(FLUSH, p_cards); } else if (isStraight(p_cards)) { newHand = new NonRepeatedHand(STRAIGHT, p_cards); } else if (isThreeOfAKind()) { newHand = new RepeatedHand(THREE_OF_A_KIND, p_cards, m_occurences, m_occurencesVector); } else if (isTwoPairs()) { newHand = new RepeatedHand(TWO_PAIRS, p_cards, m_occurences, m_occurencesVector); } else if (isOnePair()) { newHand = new RepeatedHand(ONE_PAIR, p_cards, m_occurences, m_occurencesVector); } else { newHand = new NonRepeatedHand(HIGHEST_CARD, p_cards); } m_occurences.clear(); m_occurencesVector.clear(); return newHand; }
uint32_t getHandValue(uint8_t * const hand) { orderHand(hand); if(isStraightFlush(hand)) return 8; if(isXOfKind(hand,4) ) return 7; if(isFullHouse(hand) ) return 6; if(isFlush(hand) ) return 5; if(isStraight(hand) ) return 4; if(isXOfKind(hand,3) ) return 3; if(isTwoPair(hand) ) return 2; if(isXOfKind(hand,2) ) return 1; return 0; }
bool Hand::isRoyalFlush() const { if (isStraightFlush()) { return std::none_of(_hand.begin(), _hand.end(), [](CardPtr e){ return (e->_face < Face::TEN && e->_face != Face::ACE); } ); } return false; }
/* Adrian Hernandez */ void rankHand(Hand *hand){ cardrank tieBreaker; handrank hrank = HIGH_CARD; if ((tieBreaker = isStraightFlush(hand -> cards)) != NIL) { hrank = STRAIGHT_FLUSH; } else if ((tieBreaker = isFourKind(hand -> cards)) != NIL){ hrank = FOUR_KIND; } else if((tieBreaker = isFullHouse(hand -> cards)) != NIL){ hrank = FULL_HOUSE; } else if((tieBreaker = isFlush(hand -> cards)) != NIL){ hrank = FLUSH; } else if((tieBreaker = isStraight(hand -> cards)) != NIL){ hrank = STRAIGHT; } else if((tieBreaker = isThreeOfAKind(hand -> cards)) != NIL){ hrank = THREE_KIND; } else if((tieBreaker = isTwoPair(hand -> cards)) != NIL){ hrank = TWO_PAIR; } else if((tieBreaker = isOnePair(hand -> cards, NIL)) != NIL){ hrank = ONE_PAIR; } else { /* high card */ cardrank lowCard = (hand -> cards[0]) -> rank; cardrank highCard = (hand -> cards[POKER_HAND - 1]) -> rank; /* since ACE could be at the beginning */ tieBreaker = max(lowCard, highCard); } hand -> rank = hrank; hand -> tieBreaker = tieBreaker; }
int score(const std::vector<std::string>& vec) { if (isRoyalFlush(vec)) return 900; if (isStraightFlush(vec)) return 800 + getHighCard(vec); if (isFourCard(vec)) return 700 + getHighCard(vec, 4); if (isFullHouse(vec)) return 600 + getHighCard(vec, 3); if (isFlush(vec)) return 500 + getHighCard(vec); if (isStraight(vec)) return 400 + getHighCard(vec); if (isThreeCard(vec)) return 300 + getHighCard(vec, 3); if (isTwoPair(vec)) return 200 + getHighCard(vec, 2); if (isOnePair(vec)) return 100 + getHighCard(vec, 1); return getHighCard(vec); }
PokerHand Hand::rank() const { if (isRoyalFlush()) return PokerHand::ROYAL_FLUSH; if (isStraightFlush()) return PokerHand::STRAIGHT_FLUSH; if (isFourOfAKind()) return PokerHand::FOUR_OF_A_KIND; if (isFullHouse()) return PokerHand::FULL_HOUSE; if (isFlush()) return PokerHand::FLUSH; if (isStraight()) return PokerHand::STRAIGHT; if (isThreeOfAKind()) return PokerHand::THREE_OF_A_KIND; if (isTwoPair()) return PokerHand::TWO_PAIR; if (isJacksOrBetter()) return PokerHand::JACKS_OR_BETTER; return PokerHand::NADA; }
char* calculForceSymbolique(char* hand) { // création des forces symboliques char* forceSymbolique = new char[10]; if (isStraightFlush(hand) == 1) { sprintf(forceSymbolique, "9%c", hand[0]); return forceSymbolique; } if (isQuads(hand) == 1) { if (hand[0] == hand[2]) { sprintf(forceSymbolique, "8%c%c", hand[0], hand[8]); return forceSymbolique; } sprintf(forceSymbolique, "8%c%c", hand[2], hand[0]); return forceSymbolique; } if (isFullHouse(hand) == 1) { if (hand[0] == hand[4]) { sprintf(forceSymbolique, "7%c%c", hand[4], hand[8]); return forceSymbolique; } sprintf(forceSymbolique, "7%c%c", hand[4], hand[0]); return forceSymbolique; } if (isFlush(hand) == 1) { sprintf(forceSymbolique, "6%c%c%c%c%c", hand[0], hand[2], hand[4], hand[6], hand[8]); return forceSymbolique; } if (isStraight(hand) == 1) { sprintf(forceSymbolique, "5%c", hand[0]); return forceSymbolique; } if (isTrips(hand) == 1) { if (hand[0] == hand[4]) { sprintf(forceSymbolique, "4%c%c%c", hand[4], hand[6], hand[8]); return forceSymbolique; } sprintf(forceSymbolique, "4%c%c%c", hand[4], hand[0], hand[2]); return forceSymbolique; } if (isTwoPairs(hand) == 1) { if (hand[0] != hand[2]) { sprintf(forceSymbolique, "3%c%c%c", hand[2], hand[6], hand[0]); return forceSymbolique; } else if (hand[8] != hand[6]) { sprintf(forceSymbolique, "3%c%c%c", hand[0], hand[4], hand[8]); return forceSymbolique; } sprintf(forceSymbolique, "3%c%c%c", hand[0], hand[6], hand[4]); return forceSymbolique; } if (isSinglePair(hand) == 1) { if (hand[0] == hand[2]) { sprintf(forceSymbolique, "2%c%c%c%c", hand[0], hand[4], hand[6], hand[8]); return forceSymbolique; } else if (hand[2] == hand[4]) { sprintf(forceSymbolique, "2%c%c%c%c", hand[2], hand[0], hand[6], hand[8]); return forceSymbolique; } else if (hand[4] == hand[6]) { sprintf(forceSymbolique, "2%c%c%c%c", hand[4], hand[0], hand[2], hand[8]); return forceSymbolique; } sprintf(forceSymbolique, "2%c%c%c%c", hand[6], hand[0], hand[2], hand[4]); return forceSymbolique; } sprintf(forceSymbolique, "1%c%c%c%c%c", hand[0], hand[2], hand[4], hand[6], hand[8]); /*forceSymbolique[0]='1'; forceSymbolique[1]=hand[0]; forceSymbolique[2]=hand[2]; forceSymbolique[3]=hand[4]; forceSymbolique[4]=hand[6]; forceSymbolique[5]=hand[8]; forceSymbolique[6]='\0';*/ return forceSymbolique; }