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; }
bool LittleThinkPlayer::follow(const GameState & gstat, CardSet & s) { CardSet pile(gstat.pile); Card tmp; std::cout << gstat << std::endl; s.makeEmpty(); //clear(); sortInHand(); std::cout << "( " << inHand() << " )" << std::endl; inHand().pickup(tmp, -1); // とにかく選ぶ. s.insert(tmp); // the card idential to tmp is already removed from the hand. // cardSetOfSameRanks(s, pile.size()); // たとえば、複数枚のカードを探す関数。ただしこの関数は未実装。 // 現状ではこの follow は Player.cc のものと等価 return true; }