我正在制作二十一点模拟游戏,我想发牌就像在赌场一样,

也就是说,所有玩家都被发了一张牌,发牌者一张面朝下,玩家得到了另一张牌,庄家一张面朝上

但是我看了干:(如何重做?

void BlackJack::newHand()
{
    resetHands();

    for (unsigned int i = 0; i < players.size(); i++)
        players[i]->addCard(deck->nextCard());

    Card* c = deck->nextCard();
    c->setVisible(false); // dealer gets a face down card
    dealer->addCard(c);

    for (unsigned int i = 0; i < players.size(); i++)
        players[i]->addCard(deck->nextCard());

    dealer->addCard(deck->nextCard());
}

最佳答案

将重复的代码移到另一个函数中:

void BlackJack::addDealerCard(bool visible) {
    Card* c = deck->nextCard();
    c->setVisible(visible);
    dealer->addCard(c);
}

void BlackJack::addCards() {
     for (unsigned int i = 0; i < players.size(); i++)
        players[i]->addCard(deck->nextCard());
}

void BlackJack::newHand() {
    resetHands();

    addCards();
    addDealerCard(false);

    addCards();
    addDealerCard(true);
}

10-04 16:18