2

ブラックジャックのシムを作っていて、カジノと同じようにカードを配りたいのですが、

つまり、すべてのプレイヤーにカードが配られ、ディーラーには 1 枚の裏向きのカードが配られ、プレイヤーには別のカードが配られ、ディーラーには 1 枚の表向きのカードが配られます。

BUT I VIOLATED DRY を見てください :( どうやってやり直すの??

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());
}
4

2 に答える 2

13

繰り返されるコードを別の関数に移動します。

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);
}
于 2010-01-22T23:31:01.167 に答える
1
    void BlackJack::newHand()
    {
        resetHands();

        dealToPlayers();

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

        dealToPlayers();

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

    void BlackJack::dealToPlayers()
    {
         for (unsigned int i = 0; i < players.size(); i++)
            players[i]->addCard(deck->nextCard());
    }
于 2010-01-22T23:31:04.817 に答える