2012-10-25 64 views

回答

3

如果你有card一類簡單地創建一個類用於deck其中除其他事項外包含的數據結構(如std::vector或陣列)以包含card對象。然後執行功能,如deal,shuffle等或任何你認爲合適的。

要填充你的套牌,你可以使用add_card函數。然後你可以使用它來遍歷所有的套裝和值,以創建每個不同套裝/值類型的卡片並將其添加到你的套牌。或者(或者另外),你可以在deck構造函數中做到這一點,但具有add_card函數將允許你的套牌模擬不同類型的套牌,例如個人卡hands或多套牌遊戲,例如賭場二十一點。

如果從支持隨機訪問迭代器的標準C++庫使用的容器,你可以利用std::random_shuffle功能的洗牌您deck

編輯:更新,其中包含一些評論

提出的觀點
+0

處理將需要'手'類以及..) – slashmais

+0

我非常擔心的功能的甲板課我更簡單地想知道如何填充每個卡號(2-A)並且適合 – John

+1

@slashmais沒有。每個'手'都有一個'甲板',所以'交易'僅僅意味着「從這個'甲板'分開n個大小爲k的'甲板'並且返回他們。」:-) –

0

這是爲了用一個例子延伸mathematician1975的回答是:

#include <iostream> 
#include <string> 
#include <map> 
#include <array> //needs c++11 support 

enum CARDSUIT { Spades, Hearts, Diamonds, Clubs }; 
typedef std::pair< int, int > Card; 
template< class T, size_t N> struct DECK : public std::array< T, N> 
{ 
    void shuffle() 
    { 
     //see here for example: 
     // http://www.cplusplus.com/reference/algorithm/random_shuffle/ 
    } 
}; 
typedef DECK<Card, 52> StandardDeck; 

int main() 
{ 
    int i=0,j=0; 
    StandardDeck deck; 

    for (i=Spades; i<=Clubs; i++) 
     for (j=0; j<13; j++) 
       deck[j + (i*13)] = Card(i,j); 

    for (i=0; i<(int)deck.size(); i++) 
     std::cout << deck[i].first << " " << deck[i].second << "\n"; 

    return 0; 
} 
0

最簡單的方式是從一個int到一個卡的變換,使得從0-51每個數字產生一個獨特的卡。如何,只要它們都是獨一無二的,它並不重要。

然後,你可以從一個循環中的每個數字創建一副牌,可能是一個向量,你可以執行std :: random_shuffle來洗牌。

如果你想讓你的牌組保持「通用」關於要玩什麼遊戲,那麼不要使功能卡的功能成員功能,而是「免費」功能。例如黑桃王牌可能超過了Bridge中的黑桃7,但這是Bridge(和Whist相關遊戲)的一個特徵,而不是一般的牌。同樣,一張牌或套牌也沒有「王牌」的概念。

您可能需要爲小丑設置特殊卡片選項。當然,不使用jokers的遊戲不會允許其中的一個。