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()); }
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()); }
bool Dealer::checkRankUniqueness(CardSet & cs) { int j = 0; if (cs.size() == 0) return false; if (cs[j].isJoker()) j++; for (int i = j+1; i < cs.size(); i++) { if (cs[i].isJoker()){continue;} // 追加:途中にJkrを許す if (cs[j].getNumber() != cs[i].getNumber() ) return false; } return true; }
bool Dealer::accept(CardSet & opened) { Card openedRank; if (discarded.isEmpty() && opened.isEmpty() ) return false; // regarded as "pass for empty discard pile." if (!discarded.isEmpty() && discarded.size() != opened.size()) // the number of cards must be match. no five cards w/ Jkr allowed. return false; if (!checkRankUniqueness(opened)) return false; openedRank = getCardRank(opened); if (!discarded.isEmpty()) // 場にカードがでていないのであれば無条件に受理 if (!openedRank.isGreaterThan(discardedRank)) return false; // passed all the checks. discarded.makeEmpty(); //clear(); discarded.insert(opened); // discarded.insertAll(opened); opened.makeEmpty(); //clear(); discardedRank=openedRank; return true; }
TEST(CardSetTest, fill) { using namespace pokerstove; CardSet all; all.fill(); EXPECT_EQ(STANDARD_DECK_SIZE, all.size()); }
CardSet* Rules::getLegalCards(MatchState& iMatchState, const CardSet& iCardSet) { if (iMatchState.isFirstRound()) { return (CardSet*)&iCardSet; } CardSet* legalCardSet = iCardSet.getCardsBySuit(iMatchState._masterSuit); //cout << "legal cards: " << endl; //UserInterface::showPlayerCards(*legalCardSet); if(legalCardSet->size() == 0) return (CardSet*)&iCardSet; else return legalCardSet; }
unsigned int World::computeScienceScore(const CardSet& board, char guild) const { unsigned int compass = 0, gear = 0, tablet = 0; switch (guild) { case 'n': break; case 'c': compass++; break; case 'g': gear++; break; case 't': tablet++; break; default: break; } for (unsigned int i = 0; i < board.size(); i++) { const GreenCard& card = (GreenCard&) (*board[i]); if (card.m_color == GREEN) { //std::cout << card.m_name << "()()" << std::endl; if (card.getType() == 'c') compass++; if (card.getType() == 'g') gear++; if (card.getType() == 't') tablet++; } } //std::cout << "c:" << compass << " g:" << gear << " t:" << tablet << std::endl; unsigned int res = compass*compass + gear*gear + tablet*tablet + 7*std::min(compass, std::min(gear, tablet)); return res; }
Card Dealer::getCardRank(CardSet & cs){ for (int i = 0; i < cs.size(); i++) { if (!cs[i].isJoker()){return cs[i];} } return cs[0]; }
void Observer::cardsGone(const CardSet &cardSet) { mGameCardsCount -= cardSet.size(); }