Example #1
0
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());
}
Example #2
0
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;
}
Example #5
0
TEST(CardSetTest, fill)
{
    using namespace pokerstove;
    CardSet all;
    all.fill();
    EXPECT_EQ(STANDARD_DECK_SIZE, all.size());
}
Example #6
0
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;
}
Example #7
0
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];
}
Example #9
0
void Observer::cardsGone(const CardSet &cardSet)
{
    mGameCardsCount -= cardSet.size();
}