我正在读学校书,当我读这本书时。 “创建一个名为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)


...然后使用循环简单地使用suitname的随机数生成四张卡。

// 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

哦,...只要您遇到这样的问题,就从小做起。一点一点地你到达那里。如果您尝试立即布置整个内容,则会感到沮丧。显然,要大致了解前进的方向,以最大程度地减少重组。

09-25 20:38