Exemple #1
0
bool Checker::canThrowCard(Seat* s, CardContainer& res)
{
    ManagerBase* m = s->manager();
    CardGreaterCmp gt(m);
    for (int i = 0; i < 4; ++i) {
        Seat* oth = m->seat(i);
        if (oth == s) {
            continue;
        }
        std::vector<Card> had;
        oth->getSuit(res.mask().hasOnlySuit(), had);
        CardContainer tmp;
        parse(m, had, tmp);
        for (auto& i : res.cards()) {
            for (auto& j : tmp.cards()) {
                if (i.mask.has(CardMask::Pair)) {
                    if (j.mask.has(CardMask::Pair)) {
                        if (i.cards.size() <= j.cards.size()) {
                            if (gt(i.cards[0], j.cards[0]) < 0) {
                                return false;
                            }
                        }
                    }
                } else if (gt(i.cards.back(), j.cards[0]) < 0) {
                    return false;
                }
            }
        }
    }
    return true;
}