int main(int argc, char *argv[]) { // Setup deck of cards CardSet deck; for (Rank r = RANK_BEGIN; r != RANK_END; ++r) { for (Suit s = SUIT_BEGIN; s != SUIT_END; ++s) { Card card(r, s); deck.insert(card); } } unsigned long long count = 0; // Test each starting hand for (CardSet::const_iterator i = deck.begin(); i != deck.end(); ++i) { CardSet::const_iterator j = i; for (++j; j != deck.end(); ++j) { string hole = Card::pairString(*i, *j); CardSet test(deck); Hand hand; test.erase(*i); hand.append(*i); test.erase(*j); hand.append(*j); count++; board(hole, test, hand); } } cout << "TOTAL: " << count << endl; printStats(); return 0; }
void board(const string& hole, const CardSet& deck, const Hand& hand) { HandStats s = stats[hole]; for (CardSet::const_iterator i = deck.begin(); i != deck.end(); ++i) { CardSet::const_iterator j = i; for (++j; j != deck.end(); ++j) { CardSet::const_iterator k = j; for (++k; k != deck.end(); ++k) { s.count++; s.outs[ board_rank(hand, *i, *j, *k) ]++; } } } stats[hole] = s; }
void Observer::cardsPickedUp(const PlayerId *playerId, const CardSet &cardSet) { mPlayersCards[playerId] += cardSet.size(); CardSet& set = mCurrentRoundData->mPickedUpCards[playerId]; unsigned int oldSize = set.size(); set.insert(cardSet.begin(), cardSet.end()); assert(oldSize + cardSet.size() == set.size()); }
bool Engine::findByPtr(const CardSet& cards, const Card* card) { for (CardSet::const_iterator it = cards.begin(); it != cards.end(); ++it) { if (&*it == card) { return true; } } return false; }
void Observer::cardsDropped(const PlayerId *playerId, const CardSet &cardSet) { mPlayersCards[playerId] -= cardSet.size(); if (mCurrentRoundData->mDroppedCards.find(playerId) == mCurrentRoundData->mDroppedCards.end()) { mCurrentRoundData->mDroppedCards[playerId] = CardSet(); } CardSet& set = mCurrentRoundData->mDroppedCards[playerId]; unsigned int oldSize = set.size(); set.insert(cardSet.begin(), cardSet.end()); assert(oldSize + cardSet.size() == set.size()); }