我有一个我创建了一个简单卡类的程序。我如何创建和填充一张扑克牌?
如果您有card
的类,则只需为deck
创建一个类,其中包含数据结构(例如std::vector
或数组)以包含card
对象。然后实现诸如deal
,shuffle
等的功能或您认为合适的任何功能。
要填充甲板,您可以使用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相关游戏)的特征,而不是一般的卡片。同样,卡片或甲板也没有"王牌"的概念。
您可能想要一个小丑的特殊卡选项。当然,不使用开玩笑的游戏不允许在甲板上其中之一。