Beispiel #1
0
QList<card> Method::MakeDecision()
{
    Player* hitPlayer = m_player->getHitPlayer();
    QList<card> hitCards = m_player->getHitCards();

    if (hitPlayer == m_player || hitPlayer == NULL)
    {
        return PlayFirst();              //主动出牌
    }
    else
    {
        Hand hitHand(hitCards);
        QList<card> beatCards = PlayBeatHand(hitHand);
        bool shouldBeat = WhetherToBeat(beatCards);
        if (shouldBeat)
        {
            return beatCards;
        }
        else
        {
            return QList<card> ();
        }
    }
    return QList<card>();
}
//
// PlayCard()
//
// default implementation
//
CCard* CPlayEngine::PlayCard()
{
	int nOrdinal = pDOC->GetNumCardsPlayedInRound();
	CCard* pCard = NULL;
	switch(nOrdinal)
	{
		case 0:
			pCard =  PlayFirst();
			break;
		case 1:
			pCard =  PlaySecond();
			break;
		case 2:
			pCard =  PlayThird();
			break;
		case 3:
			pCard =  PlayFourth();
			break;
		default:
			pCard = NULL;
	}
	// do some sanity checks
	ASSERT(pCard->IsValid());
	if (!m_pPlayer->IsDeclarer())
	{
		// playing as defender (or dummy, potentially)
		ASSERT(m_pHand->HasCard(pCard));
	}
	else
	{
		// declarer  -- may be playing for dummy or self
		if (pDOC->GetCurrentPlayer() == m_pPartner)
			ASSERT(m_pPartnersHand->HasCard(pCard));
		else
			ASSERT(m_pHand->HasCard(pCard));
	}
	//
	return pCard;
}