我正在读学校书,当我读这本书时。 “创建一个名为PlayingCard的类。”它包含四个字段-值和数字和字符串格式的西装。”
当我阅读本文时,我认为他们在谈论类字段,(静态)
问题:但是这会比“四个”大吗?
进一步阅读。 “每张纸牌在构造时都会分配其值。”因此,是否要使用为52副牌赋予“ PlayingCard”合适和价值的构造器?
问题:但这不是要我做一副牌吗?
我不确定如何进行。
书中的整个问题是:
“创建一个名为“ PlayingCard”的类。它包含四个字段-用于标准扑克牌的值和数字和字符串格式的西装(例如12可能是“ Queen”)。每张扑克牌在构造时都会为其分配值。创建另一个名为“手”的类,代表由五个“ PlayingCard”组成的标准扑克手。“手”构造函数应为其五个“ PlayingCard”中的每一个随机分配一个值,且不得重复。是一个“ Hand”中的多个4和多个心,但只有四个心。编写一个main()函数来声明“ Hand”并显示其值。”
最佳答案
PlayingCard
类的示例如下所示:
class PlayingCard
{
public:
// use this constructor to store your values
PlayingCard(int cardNum, string cardName, int suitNum, string suitName);
int GetNumericCardValue();
string GetCardName();
int GetCardSuiteNumericValue();
string GetCardSuiteName();
private:
int card_num;
string card_name;
int suite_num;
string suite_name;
}
显然,我不会为您做任何事情...但这是一个模板。
有几种处理方法。最简单的方法可能是生成一个
PlayingCard
列表,然后从列表中随机选择一张牌在您手中。我不确定您是否熟悉列表,甚至是向量...如果不熟悉,数组是否同样适用。因此,您可以执行以下操作(基于最常用的法语版本):
PlayingCard deck[52] = {};
PlayingCard hand[5] = {};
string suit[] = { "Hearts", "Diamonds", "Clubs", "Spades" };
string name[] = { "Two", "Three", "Four" }; // ...you get the idea (13 per suit)
...然后使用循环简单地使用
suit
和name
的随机数生成四张卡。// int randSuit = random number from 0 to 3
// int randCard = random card from 0 to 12
hand[0] = new PlayingCard(randCard+2, name[randCard], randSuit+1, suit[randSuit]);
在将其分配给目标索引之前,只需确认该卡尚不存在即可。如果不是,则将其分配给该索引。
您也可以生成整个卡片组,然后简单地随机选择一个索引,确认尚未选择该索引。从概念上讲,这可能对您来说更容易。我只是不想立即使用不创建对象。
顺便说一下,在某些地区
A (Ace)
也算作1
,因此,请适当调整。以上只是入门的一般架构。您可能对以下相关的SO问题感兴趣:Generating a Deck of Cards
哦,...只要您遇到这样的问题,就从小做起。一点一点地你到达那里。如果您尝试立即布置整个内容,则会感到沮丧。显然,要大致了解前进的方向,以最大程度地减少重组。