【问题标题】:PlayingCard Class扑克牌类
【发布时间】:2014-03-15 20:25:48
【问题描述】:

我正在读我的教科书,当我读到这本书的时候。 “创建一个名为 PlayingCard 的类。”它包含四个字段 - 数值和字符串格式的值和套装。”

当我读到这篇文章时,我认为他们在谈论类字段,(静态) 问题:但这会大于“四”,不是吗?

进一步阅读。 “每张纸牌在构造时都被赋予了它的价值。”所以它想要使用一个构造器来为“PlayingCard”提供一套适合 52 张牌的套牌和价值? 问:但它不是要我做一副牌吗?

我什至不知道如何继续。

书中的整个问题是:

“创建一个名为“PlayingCard”的类。它包含四个字段——一个值和一个标准的扑克牌格式的数字和字符串格式(例如,12 可能是“Queen”)。每个 PlayingCard 都被分配了它的值在构造时。创建另一个名为“Hand”的类,它表示由五个“PlayingCard”组成的标准扑克手。Hand 构造器应该为它的五个“PlayingCard”中的每一个随机分配一个值,没有重复。换句话说,一个“手”中可以有多个 4 和多个红心,但只有一个 4。编写一个 main() 函数来声明一个“手”并显示其值。”

【问题讨论】:

  • 请提及问题的其余部分。
  • 已编辑以包含书中的完整问题。

标签: c++ constructor


【解决方案1】:

您的 Hand 类将有一个由五个 PlayingCard 对象组成的数组。因此,当您创建 Hand 对象时,在您的构造函数中,您会为每张牌随机选择 2 个值 - 一个用于值,一个用于花色。然后创建一个 PlayingCard 对象并将这些值传递给它的构造函数。您只需在 main() 函数中创建一个 Hand 对象。现在您可以了解如何随机选择值而不会在您的手牌中重复,然后完成剩下的工作。希望这很清楚。

【讨论】:

    【解决方案2】:

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

    显然,我不会为你做所有事情......但这是一个开始的模板。

    有几种方法可以处理这个问题。最简单的方法可能是生成PlayingCards 的列表,然后从列表中随机选择一张卡片在您的手中。我不确定你是否熟悉列表,甚至是向量……如果不熟悉,数组也可以。

    所以,您可以这样做(基于最常用的法语变体):

    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

    哦,而且...每当您遇到此类问题时,请从小处着手。一点一点地到达那里。如果你试图立即布置整个事情,你会感到沮丧。显然,对你的前进方向有一个大致的了解,以尽量减少重组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多