Generating a Deck of Cards

前端 未结 12 917
暖寄归人
暖寄归人 2020-12-09 06:20

I\'m trying to make a simple blackjack program. Sadly, I\'m having problems right off the bat with generating a deck of cards.

#include 
#inc         


        
12条回答
  •  无人及你
    2020-12-09 07:10

    This might not compile, but here is the approach I would (and have used). You're going to want to use ints to represent your cards, but you can easily abstract this in a class. Which I'll write for you.

    class Card
    {
    public:
        enum ESuit
        {
            kSuit_Heart,
            kSuit_Club,
            kSuit_Diamond,
            kSuit_Spade,
            kSuit_Count
        };
    
        enum ERank
        {
            kRank_Ace,
            kRank_Two,
            kRank_Three,
            kRank_Four,
            kRank_Five,
            kRank_Six,
            kRank_Seven,
            kRank_Eight,
            kRank_Nine,
            kRank_Ten,
            kRank_Jack,
            kRank_Queen,
            kRank_King,
            kRank_Count
        };
    
        static int const skNumCards = kSuit_Count * kRank_Count;
    
        Card( int cardIndex )
        : mSuit( static_cast( cardIndex / kRank_Count ) )
        , mRank( static_cast( cardIndex % kRank_Count ) )
        {}
    
        ESuit GetSuit() const { return mSuit );
        ERank GetRank() const { return mRank );
    
    private:
        ESuit mSuit;
        ERank mRank;
    }
    

    Now its very simple to add to this class to get everything you want out of it. To generate the list its as simple as below.

    rstl::vector mCards;
    mCards.reserve( Card::skNumCards );
    
    for ( int cardValue = 0; cardValue < Card::skNumCards; ++cardValue )
    {
        mCards.push_back( Card( cardValue ) );
    }
    

    Do you need to shuffle?

    #include 
    std::random_shuffle( mCards.begin(), mCards.end() );
    

    How about see what the value of the first card is?

    if ( mCards[0].GetSuit() == Card::kRank_Club && mCards[0].GetRank() == Card::kRank_Ace )
    {
        std::cout << "ACE OF CLUBS!" << std::endl;
    }
    

    I didn't compile any of this, but it should be close.

提交回复
热议问题