如何使用卡类实例填充甲板类?C

  • 本文关键字:实例 何使用 填充 c++ class
  • 更新时间 :
  • 英文 :


我有一个我创建了一个简单卡类的程序。我如何创建和填充一张扑克牌?

如果您有card的类,则只需为deck创建一个类,其中包含数据结构(例如std::vector或数组)以包含card对象。然后实现诸如dealshuffle等的功能或您认为合适的任何功能。

要填充甲板,您可以使用add_card功能。然后,您可以使用它来循环所有西装和价值,以创建每种不同西装/价值类型的卡并将其添加到甲板上。另外(或另外),您可以在deck构造函数中执行此操作,但是具有add_card功能将使您的甲板可以建模不同类型的甲板,例如单个卡hands或多个甲板游戏,例如赌场二十一点。

如果您使用支持随机访问迭代器的标准C 库中的容器,则可以使用std::random_shuffle功能来洗牌deck

编辑:更新以结合注释中提出的一些点

这是用示例扩展数学1975的答案:

#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;
}

最简单的方法是从int到卡的转换,以使每个数字从0-51产生独特的卡。只要它们都是唯一的,这并不重要。

然后,您可以在一个循环中,可能将每个数字的卡片套装创建到向量中,并且您可以执行std :: Random_shuffle来洗牌。

如果您希望要玩游戏的卡片保持"通用",则不要使卡的成员功能功能,而是"免费"功能。例如黑桃的王牌可能会超过桥梁的7个黑桃,但这是桥梁(和Whist相关游戏)的特征,而不是一般的卡片。同样,卡片或甲板也没有"王牌"的概念。

您可能想要一个小丑的特殊卡选项。当然,不使用开玩笑的游戏不允许在甲板上其中之一。

最新更新